Update API specifications to version 1.0 beta1

Documentation generated from the PSA Crypto API documentation private
repository at tag "psa-crypto-api-1.0-beta1".

This uses some of the files include/psa/crypto*.h from the mbed-crypto
repository at tag "psa-api-1.0-beta".
diff --git a/docs/html/annotated.html b/docs/html/annotated.html
new file mode 100644
index 0000000..85abad1
--- /dev/null
+++ b/docs/html/annotated.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Class List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="annotated.html"><span>Class&#160;List</span></a></li>
+      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Class List</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structpsa__generate__key__extra__rsa.html" target="_self">psa_generate_key_extra_rsa</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/arrowdown.png b/docs/html/arrowdown.png
new file mode 100644
index 0000000..0b63f6d
--- /dev/null
+++ b/docs/html/arrowdown.png
Binary files differ
diff --git a/docs/html/arrowright.png b/docs/html/arrowright.png
new file mode 100644
index 0000000..c6ee22f
--- /dev/null
+++ b/docs/html/arrowright.png
Binary files differ
diff --git a/docs/html/bc_s.png b/docs/html/bc_s.png
new file mode 100644
index 0000000..224b29a
--- /dev/null
+++ b/docs/html/bc_s.png
Binary files differ
diff --git a/docs/html/bdwn.png b/docs/html/bdwn.png
new file mode 100644
index 0000000..940a0b9
--- /dev/null
+++ b/docs/html/bdwn.png
Binary files differ
diff --git a/docs/html/classes.html b/docs/html/classes.html
new file mode 100644
index 0000000..e19d394
--- /dev/null
+++ b/docs/html/classes.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Class Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+      <li class="current"><a href="classes.html"><span>Class&#160;Index</span></a></li>
+      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Class Index</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_P">P</a></div>
+<table class="classindex">
+<tr><td rowspan="2" valign="bottom"><a name="letter_p"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;p&#160;&#160;</div></td></tr></table>
+</td><td></td></tr>
+<tr><td></td></tr>
+<tr><td valign="top"><a class="el" href="structpsa__generate__key__extra__rsa.html">psa_generate_key_extra_rsa</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td></td><td></td></tr>
+</table>
+<div class="qindex"><a class="qindex" href="#letter_P">P</a></div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/closed.png b/docs/html/closed.png
new file mode 100644
index 0000000..98cc2c9
--- /dev/null
+++ b/docs/html/closed.png
Binary files differ
diff --git a/docs/html/crypto_8h.html b/docs/html/crypto_8h.html
new file mode 100644
index 0000000..611ed27
--- /dev/null
+++ b/docs/html/crypto_8h.html
@@ -0,0 +1,338 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: psa/crypto.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_7dae9cfde651cd3cb034485ce5e391b9.html">psa</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">crypto.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Platform Security Architecture cryptography module.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;crypto_platform.h&quot;</code><br />
+<code>#include &lt;stddef.h&gt;</code><br />
+<code>#include &quot;<a class="el" href="crypto__types_8h_source.html">crypto_types.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="crypto__values_8h_source.html">crypto_values.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="crypto__sizes_8h_source.html">crypto_sizes.h</a>&quot;</code><br />
+<code>#include &quot;crypto_struct.h&quot;</code><br />
+<code>#include &quot;crypto_extra.h&quot;</code><br />
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for crypto.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="crypto_8h__incl.png" border="0" usemap="#psa_2crypto_8h" alt=""/></div>
+<map name="psa_2crypto_8h" id="psa_2crypto_8h">
+<area shape="rect" id="node8" href="crypto__types_8h.html" title="PSA cryptography module: type aliases. " alt="" coords="763,102,871,129"/>
+<area shape="rect" id="node9" href="crypto__values_8h.html" title="PSA cryptography module: macros to build and analyze integer values. " alt="" coords="896,102,1011,129"/>
+<area shape="rect" id="node10" href="crypto__sizes_8h.html" title="PSA cryptography module: Mbed TLS buffer size macros. " alt="" coords="1035,102,1141,129"/>
+</map>
+</div>
+</div>
+<p><a href="crypto_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpsa__generate__key__extra__rsa.html">psa_generate_key_extra_rsa</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga5e6bc5f550e88fdc7790f2a75e79f7c5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga5e6bc5f550e88fdc7790f2a75e79f7c5">PSA_KEY_POLICY_INIT</a>&#160;&#160;&#160;{0}</td></tr>
+<tr class="separator:ga5e6bc5f550e88fdc7790f2a75e79f7c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6ab7fe8d3500bc2f21be840b4f4f8d1d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#ga6ab7fe8d3500bc2f21be840b4f4f8d1d">PSA_HASH_OPERATION_INIT</a>&#160;&#160;&#160;{0}</td></tr>
+<tr class="separator:ga6ab7fe8d3500bc2f21be840b4f4f8d1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga441b6efc161a4573d06465bd22d9dc2d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#ga441b6efc161a4573d06465bd22d9dc2d">PSA_MAC_OPERATION_INIT</a>&#160;&#160;&#160;{0}</td></tr>
+<tr class="separator:ga441b6efc161a4573d06465bd22d9dc2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2da0541aabf9a4995cf2004e36311919"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#ga2da0541aabf9a4995cf2004e36311919">PSA_CIPHER_OPERATION_INIT</a>&#160;&#160;&#160;{0}</td></tr>
+<tr class="separator:ga2da0541aabf9a4995cf2004e36311919"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf52e036794c0dc6fbadd93a2b990f366"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#gaf52e036794c0dc6fbadd93a2b990f366">PSA_AEAD_OPERATION_INIT</a>&#160;&#160;&#160;{0}</td></tr>
+<tr class="separator:gaf52e036794c0dc6fbadd93a2b990f366"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4788b471385fc667876fbd8a0d3fe062"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generators.html#ga4788b471385fc667876fbd8a0d3fe062">PSA_CRYPTO_GENERATOR_INIT</a>&#160;&#160;&#160;{0}</td></tr>
+<tr class="separator:ga4788b471385fc667876fbd8a0d3fe062"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac3222df9b9ecca4d33ae56a7b8fbb1c9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generators.html#gac3222df9b9ecca4d33ae56a7b8fbb1c9">PSA_GENERATOR_UNBRIDLED_CAPACITY</a>&#160;&#160;&#160;((size_t)(-1))</td></tr>
+<tr class="separator:gac3222df9b9ecca4d33ae56a7b8fbb1c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gabf6d5fd4e2ea89ecd425c88f057e7f75"><td class="memItemLeft" align="right" valign="top">typedef _unsigned_integral_type_&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a></td></tr>
+<tr class="memdesc:gabf6d5fd4e2ea89ecd425c88f057e7f75"><td class="mdescLeft">&#160;</td><td class="mdescRight">Key handle.  <a href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">More...</a><br /></td></tr>
+<tr class="separator:gabf6d5fd4e2ea89ecd425c88f057e7f75"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf553efd409845b6d09ff25ce2ba36607"><td class="memItemLeft" align="right" valign="top">typedef struct psa_key_policy_s&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a></td></tr>
+<tr class="separator:gaf553efd409845b6d09ff25ce2ba36607"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3c4205d2ce66c4095fc5c78c25273fab"><td class="memItemLeft" align="right" valign="top">typedef struct psa_hash_operation_s&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a></td></tr>
+<tr class="separator:ga3c4205d2ce66c4095fc5c78c25273fab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga78f0838b0c4e3db28b26355624d4bd37"><td class="memItemLeft" align="right" valign="top">typedef struct psa_mac_operation_s&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a></td></tr>
+<tr class="separator:ga78f0838b0c4e3db28b26355624d4bd37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1399de29db657e3737bb09927aae51fa"><td class="memItemLeft" align="right" valign="top">typedef struct psa_cipher_operation_s&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a></td></tr>
+<tr class="separator:ga1399de29db657e3737bb09927aae51fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga14f6a01afbaa8c5b3d8c5d345cbaa3ed"><td class="memItemLeft" align="right" valign="top">typedef struct psa_aead_operation_s&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a></td></tr>
+<tr class="separator:ga14f6a01afbaa8c5b3d8c5d345cbaa3ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1f894c4fba202ef8e307d72caf489e3b"><td class="memItemLeft" align="right" valign="top">typedef struct psa_crypto_generator_s&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a></td></tr>
+<tr class="separator:ga1f894c4fba202ef8e307d72caf489e3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga2de150803fc2f7dc6101d5af7e921dd9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9">psa_crypto_init</a> (void)</td></tr>
+<tr class="memdesc:ga2de150803fc2f7dc6101d5af7e921dd9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Library initialization.  <a href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9">More...</a><br /></td></tr>
+<tr class="separator:ga2de150803fc2f7dc6101d5af7e921dd9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac16792fd6d375a5f76d372090df40607"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#gac16792fd6d375a5f76d372090df40607">psa_key_policy_set_usage</a> (<a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *policy, <a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a> usage, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg)</td></tr>
+<tr class="memdesc:gac16792fd6d375a5f76d372090df40607"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the standard fields of a policy structure.  <a href="group__policy.html#gac16792fd6d375a5f76d372090df40607">More...</a><br /></td></tr>
+<tr class="separator:gac16792fd6d375a5f76d372090df40607"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7746662b7503e484774d0ecb5d8ac2ab"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga7746662b7503e484774d0ecb5d8ac2ab">psa_key_policy_get_usage</a> (const <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *policy)</td></tr>
+<tr class="memdesc:ga7746662b7503e484774d0ecb5d8ac2ab"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve the usage field of a policy structure.  <a href="group__policy.html#ga7746662b7503e484774d0ecb5d8ac2ab">More...</a><br /></td></tr>
+<tr class="separator:ga7746662b7503e484774d0ecb5d8ac2ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaadf16b89ace53e1d2cb5bcb0aef24c86"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#gaadf16b89ace53e1d2cb5bcb0aef24c86">psa_key_policy_get_algorithm</a> (const <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *policy)</td></tr>
+<tr class="memdesc:gaadf16b89ace53e1d2cb5bcb0aef24c86"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve the algorithm field of a policy structure.  <a href="group__policy.html#gaadf16b89ace53e1d2cb5bcb0aef24c86">More...</a><br /></td></tr>
+<tr class="separator:gaadf16b89ace53e1d2cb5bcb0aef24c86"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1e2a6e50b621864f95d438222a3c640b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga1e2a6e50b621864f95d438222a3c640b">psa_set_key_policy</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, const <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *policy)</td></tr>
+<tr class="memdesc:ga1e2a6e50b621864f95d438222a3c640b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the usage policy on a key slot.  <a href="group__policy.html#ga1e2a6e50b621864f95d438222a3c640b">More...</a><br /></td></tr>
+<tr class="separator:ga1e2a6e50b621864f95d438222a3c640b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaed087d1386b807edee66b2e445ba9111"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#gaed087d1386b807edee66b2e445ba9111">psa_get_key_policy</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *policy)</td></tr>
+<tr class="memdesc:gaed087d1386b807edee66b2e445ba9111"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the usage policy for a key slot.  <a href="group__policy.html#gaed087d1386b807edee66b2e445ba9111">More...</a><br /></td></tr>
+<tr class="separator:gaed087d1386b807edee66b2e445ba9111"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1e4825ab59260aeb3bdbb3ff07210022"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__management.html#ga1e4825ab59260aeb3bdbb3ff07210022">psa_get_key_lifetime</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a> *lifetime)</td></tr>
+<tr class="memdesc:ga1e4825ab59260aeb3bdbb3ff07210022"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve the lifetime of an open key.  <a href="group__key__management.html#ga1e4825ab59260aeb3bdbb3ff07210022">More...</a><br /></td></tr>
+<tr class="separator:ga1e4825ab59260aeb3bdbb3ff07210022"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga40094b77b7a42b9c8e158395113f1a35"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__management.html#ga40094b77b7a42b9c8e158395113f1a35">psa_allocate_key</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> *handle)</td></tr>
+<tr class="separator:ga40094b77b7a42b9c8e158395113f1a35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa9f1c848cf78b80fe2a7b18bb7ccec50"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__management.html#gaa9f1c848cf78b80fe2a7b18bb7ccec50">psa_open_key</a> (<a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a> lifetime, <a class="el" href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">psa_key_id_t</a> id, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> *handle)</td></tr>
+<tr class="separator:gaa9f1c848cf78b80fe2a7b18bb7ccec50"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4108f255d3eaa6d23a7a14b684af8d7c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__management.html#ga4108f255d3eaa6d23a7a14b684af8d7c">psa_create_key</a> (<a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a> lifetime, <a class="el" href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">psa_key_id_t</a> id, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> *handle)</td></tr>
+<tr class="separator:ga4108f255d3eaa6d23a7a14b684af8d7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa09b720d299dfe6b9f41c36e448078eb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__management.html#gaa09b720d299dfe6b9f41c36e448078eb">psa_close_key</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle)</td></tr>
+<tr class="separator:gaa09b720d299dfe6b9f41c36e448078eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac9f999cb4d098663d56095afe81a453a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__import__export.html#gac9f999cb4d098663d56095afe81a453a">psa_import_key</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> type, const uint8_t *data, size_t data_length)</td></tr>
+<tr class="memdesc:gac9f999cb4d098663d56095afe81a453a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Import a key in binary format.  <a href="group__import__export.html#gac9f999cb4d098663d56095afe81a453a">More...</a><br /></td></tr>
+<tr class="separator:gac9f999cb4d098663d56095afe81a453a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga165085fc1bc7a78b91792fdd94ae102c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__import__export.html#ga165085fc1bc7a78b91792fdd94ae102c">psa_destroy_key</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle)</td></tr>
+<tr class="memdesc:ga165085fc1bc7a78b91792fdd94ae102c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destroy a key.  <a href="group__import__export.html#ga165085fc1bc7a78b91792fdd94ae102c">More...</a><br /></td></tr>
+<tr class="separator:ga165085fc1bc7a78b91792fdd94ae102c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae8939902d6977ea8ad13eb7b4db9a042"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__import__export.html#gae8939902d6977ea8ad13eb7b4db9a042">psa_get_key_information</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> *type, size_t *bits)</td></tr>
+<tr class="memdesc:gae8939902d6977ea8ad13eb7b4db9a042"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get basic metadata about a key.  <a href="group__import__export.html#gae8939902d6977ea8ad13eb7b4db9a042">More...</a><br /></td></tr>
+<tr class="separator:gae8939902d6977ea8ad13eb7b4db9a042"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga091da8d3d39137fd6ad59f2b10234300"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__import__export.html#ga091da8d3d39137fd6ad59f2b10234300">psa_set_key_domain_parameters</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> type, const uint8_t *data, size_t data_length)</td></tr>
+<tr class="memdesc:ga091da8d3d39137fd6ad59f2b10234300"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set domain parameters for a key.  <a href="group__import__export.html#ga091da8d3d39137fd6ad59f2b10234300">More...</a><br /></td></tr>
+<tr class="separator:ga091da8d3d39137fd6ad59f2b10234300"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae260b92e32ac5d63f7dfc6ffdf6536f7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__import__export.html#gae260b92e32ac5d63f7dfc6ffdf6536f7">psa_get_key_domain_parameters</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, uint8_t *data, size_t data_size, size_t *data_length)</td></tr>
+<tr class="memdesc:gae260b92e32ac5d63f7dfc6ffdf6536f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get domain parameters for a key.  <a href="group__import__export.html#gae260b92e32ac5d63f7dfc6ffdf6536f7">More...</a><br /></td></tr>
+<tr class="separator:gae260b92e32ac5d63f7dfc6ffdf6536f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga902b9a7a6cf34d6111668be777b05eaf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__import__export.html#ga902b9a7a6cf34d6111668be777b05eaf">psa_export_key</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, uint8_t *data, size_t data_size, size_t *data_length)</td></tr>
+<tr class="memdesc:ga902b9a7a6cf34d6111668be777b05eaf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Export a key in binary format.  <a href="group__import__export.html#ga902b9a7a6cf34d6111668be777b05eaf">More...</a><br /></td></tr>
+<tr class="separator:ga902b9a7a6cf34d6111668be777b05eaf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad760d1f0d4e60972c78cbb4c8a528256"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__import__export.html#gad760d1f0d4e60972c78cbb4c8a528256">psa_export_public_key</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, uint8_t *data, size_t data_size, size_t *data_length)</td></tr>
+<tr class="memdesc:gad760d1f0d4e60972c78cbb4c8a528256"><td class="mdescLeft">&#160;</td><td class="mdescRight">Export a public key or the public part of a key pair in binary format.  <a href="group__import__export.html#gad760d1f0d4e60972c78cbb4c8a528256">More...</a><br /></td></tr>
+<tr class="separator:gad760d1f0d4e60972c78cbb4c8a528256"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5c1c24176cfb1517a8806235b3162a9d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__import__export.html#ga5c1c24176cfb1517a8806235b3162a9d">psa_copy_key</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> source_handle, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> target_handle, const <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *constraint)</td></tr>
+<tr class="separator:ga5c1c24176cfb1517a8806235b3162a9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac69f7f19d96a56c28cf3799d11b12156"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#gac69f7f19d96a56c28cf3799d11b12156">psa_hash_compute</a> (<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *input, size_t input_length, uint8_t *hash, size_t hash_size, size_t *hash_length)</td></tr>
+<tr class="separator:gac69f7f19d96a56c28cf3799d11b12156"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0bb6dbd3c310648c3cf7d202413ff0bc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#ga0bb6dbd3c310648c3cf7d202413ff0bc">psa_hash_compare</a> (<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *input, size_t input_length, const uint8_t *hash, const size_t hash_length)</td></tr>
+<tr class="separator:ga0bb6dbd3c310648c3cf7d202413ff0bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8d72896cf70fc4d514c5c6b978912515"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#ga8d72896cf70fc4d514c5c6b978912515">psa_hash_setup</a> (<a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *operation, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg)</td></tr>
+<tr class="separator:ga8d72896cf70fc4d514c5c6b978912515"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga65b16ef97d7f650899b7db4b7d1112ff"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#ga65b16ef97d7f650899b7db4b7d1112ff">psa_hash_update</a> (<a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *operation, const uint8_t *input, size_t input_length)</td></tr>
+<tr class="separator:ga65b16ef97d7f650899b7db4b7d1112ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4795fd06a0067b0adcd92e9627b8c97e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#ga4795fd06a0067b0adcd92e9627b8c97e">psa_hash_finish</a> (<a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *operation, uint8_t *hash, size_t hash_size, size_t *hash_length)</td></tr>
+<tr class="separator:ga4795fd06a0067b0adcd92e9627b8c97e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7be923c5700c9c70ef77ee9b76d1a5c0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#ga7be923c5700c9c70ef77ee9b76d1a5c0">psa_hash_verify</a> (<a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *operation, const uint8_t *hash, size_t hash_length)</td></tr>
+<tr class="separator:ga7be923c5700c9c70ef77ee9b76d1a5c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab0b4d5f9912a615559497a467b532928"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#gab0b4d5f9912a615559497a467b532928">psa_hash_abort</a> (<a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *operation)</td></tr>
+<tr class="separator:gab0b4d5f9912a615559497a467b532928"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga39673348f3302b4646bd780034a5aeda"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#ga39673348f3302b4646bd780034a5aeda">psa_hash_clone</a> (const <a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *source_operation, <a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *target_operation)</td></tr>
+<tr class="separator:ga39673348f3302b4646bd780034a5aeda"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gace78d9b51394f9d4f77952963665897a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#gace78d9b51394f9d4f77952963665897a">psa_mac_compute</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *input, size_t input_length, uint8_t *mac, size_t mac_size, size_t *mac_length)</td></tr>
+<tr class="separator:gace78d9b51394f9d4f77952963665897a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga08e2e8c21bfe762a907266f3bdd1d07c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#ga08e2e8c21bfe762a907266f3bdd1d07c">psa_mac_verify</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *input, size_t input_length, const uint8_t *mac, const size_t mac_length)</td></tr>
+<tr class="separator:ga08e2e8c21bfe762a907266f3bdd1d07c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad33f2b15119593571ca6b8e7c757ab0e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#gad33f2b15119593571ca6b8e7c757ab0e">psa_mac_sign_setup</a> (<a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *operation, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg)</td></tr>
+<tr class="separator:gad33f2b15119593571ca6b8e7c757ab0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa721a59ae6d085ec90c7dc918879a027"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#gaa721a59ae6d085ec90c7dc918879a027">psa_mac_verify_setup</a> (<a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *operation, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg)</td></tr>
+<tr class="separator:gaa721a59ae6d085ec90c7dc918879a027"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5560af371497babefe03c9da4e8a1c05"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#ga5560af371497babefe03c9da4e8a1c05">psa_mac_update</a> (<a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *operation, const uint8_t *input, size_t input_length)</td></tr>
+<tr class="separator:ga5560af371497babefe03c9da4e8a1c05"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac22bc0125580c96724a09226cfbc97f2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#gac22bc0125580c96724a09226cfbc97f2">psa_mac_sign_finish</a> (<a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *operation, uint8_t *mac, size_t mac_size, size_t *mac_length)</td></tr>
+<tr class="separator:gac22bc0125580c96724a09226cfbc97f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac92b2930d6728e1be4d011c05d485822"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#gac92b2930d6728e1be4d011c05d485822">psa_mac_verify_finish</a> (<a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *operation, const uint8_t *mac, size_t mac_length)</td></tr>
+<tr class="separator:gac92b2930d6728e1be4d011c05d485822"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacd8dd54855ba1bc0a03f104f252884fd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#gacd8dd54855ba1bc0a03f104f252884fd">psa_mac_abort</a> (<a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *operation)</td></tr>
+<tr class="separator:gacd8dd54855ba1bc0a03f104f252884fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac76dda492d9a1ba6b327bff610ec17b2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#gac76dda492d9a1ba6b327bff610ec17b2">psa_cipher_encrypt</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *input, size_t input_length, uint8_t *output, size_t output_size, size_t *output_length)</td></tr>
+<tr class="separator:gac76dda492d9a1ba6b327bff610ec17b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga43d5991711ec45c98af0c1d99f6e0216"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#ga43d5991711ec45c98af0c1d99f6e0216">psa_cipher_decrypt</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *input, size_t input_length, uint8_t *output, size_t output_size, size_t *output_length)</td></tr>
+<tr class="separator:ga43d5991711ec45c98af0c1d99f6e0216"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2a7fc79a9d150d42dba99f40ee3a185e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#ga2a7fc79a9d150d42dba99f40ee3a185e">psa_cipher_encrypt_setup</a> (<a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg)</td></tr>
+<tr class="separator:ga2a7fc79a9d150d42dba99f40ee3a185e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaddf8504e5367cd0efb4415bdec004f44"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#gaddf8504e5367cd0efb4415bdec004f44">psa_cipher_decrypt_setup</a> (<a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg)</td></tr>
+<tr class="separator:gaddf8504e5367cd0efb4415bdec004f44"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga44857cf5e0c3d134a3c560f8ff5b50aa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#ga44857cf5e0c3d134a3c560f8ff5b50aa">psa_cipher_generate_iv</a> (<a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation, unsigned char *iv, size_t iv_size, size_t *iv_length)</td></tr>
+<tr class="separator:ga44857cf5e0c3d134a3c560f8ff5b50aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1359b2101f31637496ce7cc36c6e3d42"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#ga1359b2101f31637496ce7cc36c6e3d42">psa_cipher_set_iv</a> (<a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation, const unsigned char *iv, size_t iv_length)</td></tr>
+<tr class="separator:ga1359b2101f31637496ce7cc36c6e3d42"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafd0caea99cf1052527e4089d37f5ab91"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#gafd0caea99cf1052527e4089d37f5ab91">psa_cipher_update</a> (<a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation, const uint8_t *input, size_t input_length, unsigned char *output, size_t output_size, size_t *output_length)</td></tr>
+<tr class="separator:gafd0caea99cf1052527e4089d37f5ab91"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1dcb58b8befe23f8a4d7a1d49c99249b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#ga1dcb58b8befe23f8a4d7a1d49c99249b">psa_cipher_finish</a> (<a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation, uint8_t *output, size_t output_size, size_t *output_length)</td></tr>
+<tr class="separator:ga1dcb58b8befe23f8a4d7a1d49c99249b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaad482cdca2098bca0620596aaa02eaa4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#gaad482cdca2098bca0620596aaa02eaa4">psa_cipher_abort</a> (<a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation)</td></tr>
+<tr class="separator:gaad482cdca2098bca0620596aaa02eaa4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga44de092cf58bb6c820c5c80a6c51610d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#ga44de092cf58bb6c820c5c80a6c51610d">psa_aead_encrypt</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *nonce, size_t nonce_length, const uint8_t *additional_data, size_t additional_data_length, const uint8_t *plaintext, size_t plaintext_length, uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length)</td></tr>
+<tr class="separator:ga44de092cf58bb6c820c5c80a6c51610d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa8ce6527f2e227f1071fadbf2099793b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#gaa8ce6527f2e227f1071fadbf2099793b">psa_aead_decrypt</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *nonce, size_t nonce_length, const uint8_t *additional_data, size_t additional_data_length, const uint8_t *ciphertext, size_t ciphertext_length, uint8_t *plaintext, size_t plaintext_size, size_t *plaintext_length)</td></tr>
+<tr class="separator:gaa8ce6527f2e227f1071fadbf2099793b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga47265dc4852f1476f852752218fd12b2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#ga47265dc4852f1476f852752218fd12b2">psa_aead_encrypt_setup</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg)</td></tr>
+<tr class="separator:ga47265dc4852f1476f852752218fd12b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga439896519d4a367ec86b47f201884152"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#ga439896519d4a367ec86b47f201884152">psa_aead_decrypt_setup</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg)</td></tr>
+<tr class="separator:ga439896519d4a367ec86b47f201884152"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3eadcf2a29f662129ea4fb3454969ba2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#ga3eadcf2a29f662129ea4fb3454969ba2">psa_aead_generate_nonce</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation, unsigned char *nonce, size_t nonce_size, size_t *nonce_length)</td></tr>
+<tr class="separator:ga3eadcf2a29f662129ea4fb3454969ba2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga40641d0721ca7fe01bbcd9ef635fbc46"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#ga40641d0721ca7fe01bbcd9ef635fbc46">psa_aead_set_nonce</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation, const unsigned char *nonce, size_t nonce_length)</td></tr>
+<tr class="separator:ga40641d0721ca7fe01bbcd9ef635fbc46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad3431e28d05002c2a7b0760610176050"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#gad3431e28d05002c2a7b0760610176050">psa_aead_set_lengths</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation, size_t ad_length, size_t plaintext_length)</td></tr>
+<tr class="separator:gad3431e28d05002c2a7b0760610176050"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6d0eed03f832e5c9c91cb8adf2882569"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569">psa_aead_update_ad</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation, const uint8_t *input, size_t input_length)</td></tr>
+<tr class="separator:ga6d0eed03f832e5c9c91cb8adf2882569"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3b105de2088cef7c3d9e2fd8048c841c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">psa_aead_update</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation, const uint8_t *input, size_t input_length, unsigned char *output, size_t output_size, size_t *output_length)</td></tr>
+<tr class="separator:ga3b105de2088cef7c3d9e2fd8048c841c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga759791bbe1763b377c3b5447641f1fc8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#ga759791bbe1763b377c3b5447641f1fc8">psa_aead_finish</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation, uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length, uint8_t *tag, size_t tag_size, size_t *tag_length)</td></tr>
+<tr class="separator:ga759791bbe1763b377c3b5447641f1fc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaaed211fc61977c859d6ff07f39f59219"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#gaaed211fc61977c859d6ff07f39f59219">psa_aead_verify</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation, const uint8_t *tag, size_t tag_length)</td></tr>
+<tr class="separator:gaaed211fc61977c859d6ff07f39f59219"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae8a5f93d92318c8f592ee9fbb9d36ba0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#gae8a5f93d92318c8f592ee9fbb9d36ba0">psa_aead_abort</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation)</td></tr>
+<tr class="separator:gae8a5f93d92318c8f592ee9fbb9d36ba0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1b0db9d345b5048cdd39357ac2d56c07"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__asymmetric.html#ga1b0db9d345b5048cdd39357ac2d56c07">psa_asymmetric_sign</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *hash, size_t hash_length, uint8_t *signature, size_t signature_size, size_t *signature_length)</td></tr>
+<tr class="memdesc:ga1b0db9d345b5048cdd39357ac2d56c07"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sign a hash or short message with a private key.  <a href="group__asymmetric.html#ga1b0db9d345b5048cdd39357ac2d56c07">More...</a><br /></td></tr>
+<tr class="separator:ga1b0db9d345b5048cdd39357ac2d56c07"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1b8e964c8d927e3d632325d762959eb7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__asymmetric.html#ga1b8e964c8d927e3d632325d762959eb7">psa_asymmetric_verify</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *hash, size_t hash_length, const uint8_t *signature, size_t signature_length)</td></tr>
+<tr class="memdesc:ga1b8e964c8d927e3d632325d762959eb7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verify the signature a hash or short message using a public key.  <a href="group__asymmetric.html#ga1b8e964c8d927e3d632325d762959eb7">More...</a><br /></td></tr>
+<tr class="separator:ga1b8e964c8d927e3d632325d762959eb7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad429293b7b0bf2a830b9540a02552004"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__asymmetric.html#gad429293b7b0bf2a830b9540a02552004">psa_asymmetric_encrypt</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *input, size_t input_length, const uint8_t *salt, size_t salt_length, uint8_t *output, size_t output_size, size_t *output_length)</td></tr>
+<tr class="memdesc:gad429293b7b0bf2a830b9540a02552004"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encrypt a short message with a public key.  <a href="group__asymmetric.html#gad429293b7b0bf2a830b9540a02552004">More...</a><br /></td></tr>
+<tr class="separator:gad429293b7b0bf2a830b9540a02552004"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga34b55fbaee23dba1a677186fc66a556e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__asymmetric.html#ga34b55fbaee23dba1a677186fc66a556e">psa_asymmetric_decrypt</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *input, size_t input_length, const uint8_t *salt, size_t salt_length, uint8_t *output, size_t output_size, size_t *output_length)</td></tr>
+<tr class="memdesc:ga34b55fbaee23dba1a677186fc66a556e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Decrypt a short message with a private key.  <a href="group__asymmetric.html#ga34b55fbaee23dba1a677186fc66a556e">More...</a><br /></td></tr>
+<tr class="separator:ga34b55fbaee23dba1a677186fc66a556e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7453491e3b440193be2c5dccc2040fd2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generators.html#ga7453491e3b440193be2c5dccc2040fd2">psa_get_generator_capacity</a> (const <a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator, size_t *capacity)</td></tr>
+<tr class="separator:ga7453491e3b440193be2c5dccc2040fd2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga45676ec3c719622f95caaf926f44bb6e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generators.html#ga45676ec3c719622f95caaf926f44bb6e">psa_set_generator_capacity</a> (<a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator, size_t capacity)</td></tr>
+<tr class="separator:ga45676ec3c719622f95caaf926f44bb6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab5712ad29b78c2b170e64cc5bcfc1bce"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generators.html#gab5712ad29b78c2b170e64cc5bcfc1bce">psa_generator_read</a> (<a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator, uint8_t *output, size_t output_length)</td></tr>
+<tr class="separator:gab5712ad29b78c2b170e64cc5bcfc1bce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7fcdf07cd37279ca167db484053da894"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generators.html#ga7fcdf07cd37279ca167db484053da894">psa_generator_import_key</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> type, size_t bits, <a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator)</td></tr>
+<tr class="separator:ga7fcdf07cd37279ca167db484053da894"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga563ca64537d90368899286b36d8cf7f3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generators.html#ga563ca64537d90368899286b36d8cf7f3">psa_generator_abort</a> (<a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator)</td></tr>
+<tr class="separator:ga563ca64537d90368899286b36d8cf7f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1825696be813dfac2b8d3d02717e71c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#ga1825696be813dfac2b8d3d02717e71c5">psa_key_derivation_setup</a> (<a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg)</td></tr>
+<tr class="separator:ga1825696be813dfac2b8d3d02717e71c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1b30e888db65c71f5337900848e1b03f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#ga1b30e888db65c71f5337900848e1b03f">psa_key_derivation_input_bytes</a> (<a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator, <a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a> step, const uint8_t *data, size_t data_length)</td></tr>
+<tr class="separator:ga1b30e888db65c71f5337900848e1b03f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9e5f549aa1f6f3863a07008d3d98f91a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#ga9e5f549aa1f6f3863a07008d3d98f91a">psa_key_derivation_input_key</a> (<a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator, <a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a> step, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle)</td></tr>
+<tr class="separator:ga9e5f549aa1f6f3863a07008d3d98f91a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2c7fe304cacc141ffb91553548abc5d2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#ga2c7fe304cacc141ffb91553548abc5d2">psa_key_agreement</a> (<a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator, <a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a> step, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> private_key, const uint8_t *peer_key, size_t peer_key_length)</td></tr>
+<tr class="separator:ga2c7fe304cacc141ffb91553548abc5d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf1b12eff66a1a0020b5bdc8d0e910006"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#gaf1b12eff66a1a0020b5bdc8d0e910006">psa_key_agreement_raw_shared_secret</a> (<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> private_key, const uint8_t *peer_key, size_t peer_key_length, uint8_t *output, size_t output_size, size_t *output_length)</td></tr>
+<tr class="separator:gaf1b12eff66a1a0020b5bdc8d0e910006"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1985eae417dfbccedf50d5fff54ea8c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__random.html#ga1985eae417dfbccedf50d5fff54ea8c5">psa_generate_random</a> (uint8_t *output, size_t output_size)</td></tr>
+<tr class="memdesc:ga1985eae417dfbccedf50d5fff54ea8c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate random bytes.  <a href="group__random.html#ga1985eae417dfbccedf50d5fff54ea8c5">More...</a><br /></td></tr>
+<tr class="separator:ga1985eae417dfbccedf50d5fff54ea8c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga72921520494b4f007a3afb904cd9ecdd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__random.html#ga72921520494b4f007a3afb904cd9ecdd">psa_generate_key</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> type, size_t bits, const void *extra, size_t extra_size)</td></tr>
+<tr class="memdesc:ga72921520494b4f007a3afb904cd9ecdd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate a key or key pair.  <a href="group__random.html#ga72921520494b4f007a3afb904cd9ecdd">More...</a><br /></td></tr>
+<tr class="separator:ga72921520494b4f007a3afb904cd9ecdd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Platform Security Architecture cryptography module. </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/crypto_8h__incl.map b/docs/html/crypto_8h__incl.map
new file mode 100644
index 0000000..1ed73ed
--- /dev/null
+++ b/docs/html/crypto_8h__incl.map
@@ -0,0 +1,5 @@
+<map id="psa/crypto.h" name="psa/crypto.h">
+<area shape="rect" id="node8" href="$crypto__types_8h.html" title="PSA cryptography module: type aliases. " alt="" coords="763,102,871,129"/>
+<area shape="rect" id="node9" href="$crypto__values_8h.html" title="PSA cryptography module: macros to build and analyze integer values. " alt="" coords="896,102,1011,129"/>
+<area shape="rect" id="node10" href="$crypto__sizes_8h.html" title="PSA cryptography module: Mbed TLS buffer size macros. " alt="" coords="1035,102,1141,129"/>
+</map>
diff --git a/docs/html/crypto_8h__incl.md5 b/docs/html/crypto_8h__incl.md5
new file mode 100644
index 0000000..4e6059e
--- /dev/null
+++ b/docs/html/crypto_8h__incl.md5
@@ -0,0 +1 @@
+074e89e7e237fada4ce8156df08ea036
\ No newline at end of file
diff --git a/docs/html/crypto_8h__incl.png b/docs/html/crypto_8h__incl.png
new file mode 100644
index 0000000..520e3e9
--- /dev/null
+++ b/docs/html/crypto_8h__incl.png
Binary files differ
diff --git a/docs/html/crypto_8h_source.html b/docs/html/crypto_8h_source.html
new file mode 100644
index 0000000..4a840c1
--- /dev/null
+++ b/docs/html/crypto_8h_source.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: psa/crypto.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_7dae9cfde651cd3cb034485ce5e391b9.html">psa</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">crypto.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="crypto_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> *  Copyright (C) 2018, ARM Limited, All Rights Reserved</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *  SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *  Licensed under the Apache License, Version 2.0 (the &quot;License&quot;); you may</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *  not use this file except in compliance with the License.</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *  You may obtain a copy of the License at</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> *  http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> *  Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> *  distributed under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> *  See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> *  limitations under the License.</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#ifndef PSA_CRYPTO_H</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#define PSA_CRYPTO_H</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;crypto_platform.h&quot;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &lt;stddef.h&gt;</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#ifdef __DOXYGEN_ONLY__</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment">/* This __DOXYGEN_ONLY__ block contains mock definitions for things that</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment"> * must be defined in the crypto_platform.h header. These mock definitions</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"> * are present in this file as a convenience to generate pretty-printed</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment"> * documentation that includes those definitions. */</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">   47</a></span>&#160;<span class="keyword">typedef</span> _unsigned_integral_type_ <a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>;</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* __DOXYGEN_ONLY__ */</span><span class="preprocessor"></span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="comment">/* The file &quot;crypto_types.h&quot; declares types that encode errors,</span></div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="comment"> * algorithms, key types, policies, etc. */</span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="crypto__types_8h.html">crypto_types.h</a>&quot;</span></div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="comment">/* The file &quot;crypto_values.h&quot; declares macros to build and analyze values</span></div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment"> * of integral types defined in &quot;crypto_types.h&quot;. */</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="crypto__values_8h.html">crypto_values.h</a>&quot;</span></div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9">psa_crypto_init</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">  128</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>psa_key_policy_s <a class="code" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a>;</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="preprocessor">#ifdef __DOXYGEN_ONLY__</span></div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<span class="comment">/* This is an example definition for documentation purposes.</span></div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;<span class="comment"> * Implementations should define a suitable value in `crypto_struct.h`.</span></div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="group__policy.html#ga5e6bc5f550e88fdc7790f2a75e79f7c5">  139</a></span>&#160;<span class="preprocessor">#define PSA_KEY_POLICY_INIT {0}</span></div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;<span class="keyword">static</span> <a class="code" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> psa_key_policy_init(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;<span class="keywordtype">void</span> <a class="code" href="group__policy.html#gac16792fd6d375a5f76d372090df40607">psa_key_policy_set_usage</a>(<a class="code" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *policy,</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;                              <a class="code" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a> usage,</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;                              <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg);</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;<a class="code" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a> <a class="code" href="group__policy.html#ga7746662b7503e484774d0ecb5d8ac2ab">psa_key_policy_get_usage</a>(<span class="keyword">const</span> <a class="code" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *policy);</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;<a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> <a class="code" href="group__policy.html#gaadf16b89ace53e1d2cb5bcb0aef24c86">psa_key_policy_get_algorithm</a>(<span class="keyword">const</span> <a class="code" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *policy);</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__policy.html#ga1e2a6e50b621864f95d438222a3c640b">psa_set_key_policy</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;                                <span class="keyword">const</span> <a class="code" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *policy);</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__policy.html#gaed087d1386b807edee66b2e445ba9111">psa_get_key_policy</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;                                <a class="code" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *policy);</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__key__management.html#ga1e4825ab59260aeb3bdbb3ff07210022">psa_get_key_lifetime</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;                                  <a class="code" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a> *lifetime);</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__key__management.html#ga40094b77b7a42b9c8e158395113f1a35">psa_allocate_key</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> *handle);</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__key__management.html#gaa9f1c848cf78b80fe2a7b18bb7ccec50">psa_open_key</a>(<a class="code" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a> lifetime,</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;                          <a class="code" href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">psa_key_id_t</a> <span class="keywordtype">id</span>,</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;                          <a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> *handle);</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__key__management.html#ga4108f255d3eaa6d23a7a14b684af8d7c">psa_create_key</a>(<a class="code" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a> lifetime,</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;                            <a class="code" href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">psa_key_id_t</a> <span class="keywordtype">id</span>,</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;                            <a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> *handle);</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__key__management.html#gaa09b720d299dfe6b9f41c36e448078eb">psa_close_key</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle);</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__import__export.html#gac9f999cb4d098663d56095afe81a453a">psa_import_key</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;                            <a class="code" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> type,</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;                            <span class="keyword">const</span> uint8_t *data,</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;                            <span class="keywordtype">size_t</span> data_length);</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__import__export.html#ga165085fc1bc7a78b91792fdd94ae102c">psa_destroy_key</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle);</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__import__export.html#gae8939902d6977ea8ad13eb7b4db9a042">psa_get_key_information</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;                                     <a class="code" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> *type,</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;                                     <span class="keywordtype">size_t</span> *bits);</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__import__export.html#ga091da8d3d39137fd6ad59f2b10234300">psa_set_key_domain_parameters</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;                                           <a class="code" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> type,</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;                                           <span class="keyword">const</span> uint8_t *data,</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;                                           <span class="keywordtype">size_t</span> data_length);</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__import__export.html#gae260b92e32ac5d63f7dfc6ffdf6536f7">psa_get_key_domain_parameters</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;                                           uint8_t *data,</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;                                           <span class="keywordtype">size_t</span> data_size,</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;                                           <span class="keywordtype">size_t</span> *data_length);</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__import__export.html#ga902b9a7a6cf34d6111668be777b05eaf">psa_export_key</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;                            uint8_t *data,</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;                            <span class="keywordtype">size_t</span> data_size,</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;                            <span class="keywordtype">size_t</span> *data_length);</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__import__export.html#gad760d1f0d4e60972c78cbb4c8a528256">psa_export_public_key</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;                                   uint8_t *data,</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;                                   <span class="keywordtype">size_t</span> data_size,</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;                                   <span class="keywordtype">size_t</span> *data_length);</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;</div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__import__export.html#ga5c1c24176cfb1517a8806235b3162a9d">psa_copy_key</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> source_handle,</div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;                          <a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> target_handle,</div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;                          <span class="keyword">const</span> <a class="code" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *constraint);</div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;</div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__hash.html#gac69f7f19d96a56c28cf3799d11b12156">psa_hash_compute</a>(<a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg,</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;                              <span class="keyword">const</span> uint8_t *input,</div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;                              <span class="keywordtype">size_t</span> input_length,</div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;                              uint8_t *hash,</div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;                              <span class="keywordtype">size_t</span> hash_size,</div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;                              <span class="keywordtype">size_t</span> *hash_length);</div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;</div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__hash.html#ga0bb6dbd3c310648c3cf7d202413ff0bc">psa_hash_compare</a>(<a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg,</div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;                              <span class="keyword">const</span> uint8_t *input,</div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;                              <span class="keywordtype">size_t</span> input_length,</div><div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;                              <span class="keyword">const</span> uint8_t *hash,</div><div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;                              <span class="keyword">const</span> <span class="keywordtype">size_t</span> hash_length);</div><div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;</div><div class="line"><a name="l00908"></a><span class="lineno"><a class="line" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">  908</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>psa_hash_operation_s <a class="code" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a>;</div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;</div><div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;<span class="preprocessor">#ifdef __DOXYGEN_ONLY__</span></div><div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;<span class="comment">/* This is an example definition for documentation purposes.</span></div><div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;<span class="comment"> * Implementations should define a suitable value in `crypto_struct.h`.</span></div><div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00919"></a><span class="lineno"><a class="line" href="group__hash.html#ga6ab7fe8d3500bc2f21be840b4f4f8d1d">  919</a></span>&#160;<span class="preprocessor">#define PSA_HASH_OPERATION_INIT {0}</span></div><div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;</div><div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;<span class="keyword">static</span> <a class="code" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> psa_hash_operation_init(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;</div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__hash.html#ga8d72896cf70fc4d514c5c6b978912515">psa_hash_setup</a>(<a class="code" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *operation,</div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;                            <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg);</div><div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;</div><div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__hash.html#ga65b16ef97d7f650899b7db4b7d1112ff">psa_hash_update</a>(<a class="code" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *operation,</div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;                             <span class="keyword">const</span> uint8_t *input,</div><div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;                             <span class="keywordtype">size_t</span> input_length);</div><div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__hash.html#ga4795fd06a0067b0adcd92e9627b8c97e">psa_hash_finish</a>(<a class="code" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *operation,</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;                             uint8_t *hash,</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;                             <span class="keywordtype">size_t</span> hash_size,</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;                             <span class="keywordtype">size_t</span> *hash_length);</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__hash.html#ga7be923c5700c9c70ef77ee9b76d1a5c0">psa_hash_verify</a>(<a class="code" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *operation,</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;                             <span class="keyword">const</span> uint8_t *hash,</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;                             <span class="keywordtype">size_t</span> hash_length);</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__hash.html#gab0b4d5f9912a615559497a467b532928">psa_hash_abort</a>(<a class="code" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *operation);</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__hash.html#ga39673348f3302b4646bd780034a5aeda">psa_hash_clone</a>(<span class="keyword">const</span> <a class="code" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *source_operation,</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;                            <a class="code" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *target_operation);</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__MAC.html#gace78d9b51394f9d4f77952963665897a">psa_mac_compute</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;                             <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg,</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;                             <span class="keyword">const</span> uint8_t *input,</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;                             <span class="keywordtype">size_t</span> input_length,</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;                             uint8_t *mac,</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;                             <span class="keywordtype">size_t</span> mac_size,</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;                             <span class="keywordtype">size_t</span> *mac_length);</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__MAC.html#ga08e2e8c21bfe762a907266f3bdd1d07c">psa_mac_verify</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;                            <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg,</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;                            <span class="keyword">const</span> uint8_t *input,</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;                            <span class="keywordtype">size_t</span> input_length,</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;                            <span class="keyword">const</span> uint8_t *mac,</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;                            <span class="keyword">const</span> <span class="keywordtype">size_t</span> mac_length);</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;</div><div class="line"><a name="l01240"></a><span class="lineno"><a class="line" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37"> 1240</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>psa_mac_operation_s <a class="code" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a>;</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;<span class="preprocessor">#ifdef __DOXYGEN_ONLY__</span></div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;<span class="comment">/* This is an example definition for documentation purposes.</span></div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;<span class="comment"> * Implementations should define a suitable value in `crypto_struct.h`.</span></div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01251"></a><span class="lineno"><a class="line" href="group__MAC.html#ga441b6efc161a4573d06465bd22d9dc2d"> 1251</a></span>&#160;<span class="preprocessor">#define PSA_MAC_OPERATION_INIT {0}</span></div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;<span class="keyword">static</span> <a class="code" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> psa_mac_operation_init(<span class="keywordtype">void</span>);</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__MAC.html#gad33f2b15119593571ca6b8e7c757ab0e">psa_mac_sign_setup</a>(<a class="code" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *operation,</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;                                <a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;                                <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg);</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__MAC.html#gaa721a59ae6d085ec90c7dc918879a027">psa_mac_verify_setup</a>(<a class="code" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *operation,</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;                                  <a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;                                  <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg);</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__MAC.html#ga5560af371497babefe03c9da4e8a1c05">psa_mac_update</a>(<a class="code" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *operation,</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;                            <span class="keyword">const</span> uint8_t *input,</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;                            <span class="keywordtype">size_t</span> input_length);</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__MAC.html#gac22bc0125580c96724a09226cfbc97f2">psa_mac_sign_finish</a>(<a class="code" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *operation,</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;                                 uint8_t *mac,</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;                                 <span class="keywordtype">size_t</span> mac_size,</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;                                 <span class="keywordtype">size_t</span> *mac_length);</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__MAC.html#gac92b2930d6728e1be4d011c05d485822">psa_mac_verify_finish</a>(<a class="code" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *operation,</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;                                   <span class="keyword">const</span> uint8_t *mac,</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;                                   <span class="keywordtype">size_t</span> mac_length);</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__MAC.html#gacd8dd54855ba1bc0a03f104f252884fd">psa_mac_abort</a>(<a class="code" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *operation);</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160;</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__cipher.html#gac76dda492d9a1ba6b327bff610ec17b2">psa_cipher_encrypt</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160;                                <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg,</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160;                                <span class="keyword">const</span> uint8_t *input,</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160;                                <span class="keywordtype">size_t</span> input_length,</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160;                                uint8_t *output,</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160;                                <span class="keywordtype">size_t</span> output_size,</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;                                <span class="keywordtype">size_t</span> *output_length);</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160;</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__cipher.html#ga43d5991711ec45c98af0c1d99f6e0216">psa_cipher_decrypt</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;                                <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg,</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160;                                <span class="keyword">const</span> uint8_t *input,</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;                                <span class="keywordtype">size_t</span> input_length,</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;                                uint8_t *output,</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;                                <span class="keywordtype">size_t</span> output_size,</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;                                <span class="keywordtype">size_t</span> *output_length);</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;</div><div class="line"><a name="l01625"></a><span class="lineno"><a class="line" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa"> 1625</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>psa_cipher_operation_s <a class="code" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a>;</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160;</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;<span class="preprocessor">#ifdef __DOXYGEN_ONLY__</span></div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160;<span class="comment">/* This is an example definition for documentation purposes.</span></div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160;<span class="comment"> * Implementations should define a suitable value in `crypto_struct.h`.</span></div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01636"></a><span class="lineno"><a class="line" href="group__cipher.html#ga2da0541aabf9a4995cf2004e36311919"> 1636</a></span>&#160;<span class="preprocessor">#define PSA_CIPHER_OPERATION_INIT {0}</span></div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160;<span class="keyword">static</span> <a class="code" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> psa_cipher_operation_init(<span class="keywordtype">void</span>);</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__cipher.html#ga2a7fc79a9d150d42dba99f40ee3a185e">psa_cipher_encrypt_setup</a>(<a class="code" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation,</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160;                                      <a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;                                      <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg);</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160;</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__cipher.html#gaddf8504e5367cd0efb4415bdec004f44">psa_cipher_decrypt_setup</a>(<a class="code" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation,</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160;                                      <a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160;                                      <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg);</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160;</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__cipher.html#ga44857cf5e0c3d134a3c560f8ff5b50aa">psa_cipher_generate_iv</a>(<a class="code" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation,</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160;                                    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *iv,</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160;                                    <span class="keywordtype">size_t</span> iv_size,</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160;                                    <span class="keywordtype">size_t</span> *iv_length);</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__cipher.html#ga1359b2101f31637496ce7cc36c6e3d42">psa_cipher_set_iv</a>(<a class="code" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation,</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160;                               <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *iv,</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160;                               <span class="keywordtype">size_t</span> iv_length);</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160;</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__cipher.html#gafd0caea99cf1052527e4089d37f5ab91">psa_cipher_update</a>(<a class="code" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation,</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;                               <span class="keyword">const</span> uint8_t *input,</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;                               <span class="keywordtype">size_t</span> input_length,</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;                               <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *output,</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160;                               <span class="keywordtype">size_t</span> output_size,</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160;                               <span class="keywordtype">size_t</span> *output_length);</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160;</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__cipher.html#ga1dcb58b8befe23f8a4d7a1d49c99249b">psa_cipher_finish</a>(<a class="code" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation,</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160;                               uint8_t *output,</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;                               <span class="keywordtype">size_t</span> output_size,</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160;                               <span class="keywordtype">size_t</span> *output_length);</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160;</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__cipher.html#gaad482cdca2098bca0620596aaa02eaa4">psa_cipher_abort</a>(<a class="code" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation);</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160;</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__aead.html#ga44de092cf58bb6c820c5c80a6c51610d">psa_aead_encrypt</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160;                              <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg,</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160;                              <span class="keyword">const</span> uint8_t *nonce,</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160;                              <span class="keywordtype">size_t</span> nonce_length,</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160;                              <span class="keyword">const</span> uint8_t *additional_data,</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160;                              <span class="keywordtype">size_t</span> additional_data_length,</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160;                              <span class="keyword">const</span> uint8_t *plaintext,</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160;                              <span class="keywordtype">size_t</span> plaintext_length,</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160;                              uint8_t *ciphertext,</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160;                              <span class="keywordtype">size_t</span> ciphertext_size,</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160;                              <span class="keywordtype">size_t</span> *ciphertext_length);</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160;</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__aead.html#gaa8ce6527f2e227f1071fadbf2099793b">psa_aead_decrypt</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;                              <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg,</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160;                              <span class="keyword">const</span> uint8_t *nonce,</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160;                              <span class="keywordtype">size_t</span> nonce_length,</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160;                              <span class="keyword">const</span> uint8_t *additional_data,</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;                              <span class="keywordtype">size_t</span> additional_data_length,</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;                              <span class="keyword">const</span> uint8_t *ciphertext,</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;                              <span class="keywordtype">size_t</span> ciphertext_length,</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160;                              uint8_t *plaintext,</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160;                              <span class="keywordtype">size_t</span> plaintext_size,</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;                              <span class="keywordtype">size_t</span> *plaintext_length);</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160;</div><div class="line"><a name="l02083"></a><span class="lineno"><a class="line" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed"> 2083</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>psa_aead_operation_s <a class="code" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a>;</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160;<span class="preprocessor">#ifdef __DOXYGEN_ONLY__</span></div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160;<span class="comment">/* This is an example definition for documentation purposes.</span></div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160;<span class="comment"> * Implementations should define a suitable value in `crypto_struct.h`.</span></div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02094"></a><span class="lineno"><a class="line" href="group__aead.html#gaf52e036794c0dc6fbadd93a2b990f366"> 2094</a></span>&#160;<span class="preprocessor">#define PSA_AEAD_OPERATION_INIT {0}</span></div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160;</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;<span class="keyword">static</span> <a class="code" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> psa_aead_operation_init(<span class="keywordtype">void</span>);</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160;</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__aead.html#ga47265dc4852f1476f852752218fd12b2">psa_aead_encrypt_setup</a>(<a class="code" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation,</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160;                                    <a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;                                    <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg);</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160;</div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__aead.html#ga439896519d4a367ec86b47f201884152">psa_aead_decrypt_setup</a>(<a class="code" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation,</div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160;                                    <a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160;                                    <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg);</div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160;</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__aead.html#ga3eadcf2a29f662129ea4fb3454969ba2">psa_aead_generate_nonce</a>(<a class="code" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation,</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>&#160;                                     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *nonce,</div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>&#160;                                     <span class="keywordtype">size_t</span> nonce_size,</div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160;                                     <span class="keywordtype">size_t</span> *nonce_length);</div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>&#160;</div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__aead.html#ga40641d0721ca7fe01bbcd9ef635fbc46">psa_aead_set_nonce</a>(<a class="code" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation,</div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>&#160;                                <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *nonce,</div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>&#160;                                <span class="keywordtype">size_t</span> nonce_length);</div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160;</div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__aead.html#gad3431e28d05002c2a7b0760610176050">psa_aead_set_lengths</a>(<a class="code" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation,</div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>&#160;                                  <span class="keywordtype">size_t</span> ad_length,</div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160;                                  <span class="keywordtype">size_t</span> plaintext_length);</div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160;</div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569">psa_aead_update_ad</a>(<a class="code" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation,</div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160;                                <span class="keyword">const</span> uint8_t *input,</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160;                                <span class="keywordtype">size_t</span> input_length);</div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>&#160;</div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">psa_aead_update</a>(<a class="code" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation,</div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160;                             <span class="keyword">const</span> uint8_t *input,</div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>&#160;                             <span class="keywordtype">size_t</span> input_length,</div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>&#160;                             <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *output,</div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160;                             <span class="keywordtype">size_t</span> output_size,</div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>&#160;                             <span class="keywordtype">size_t</span> *output_length);</div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160;</div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__aead.html#ga759791bbe1763b377c3b5447641f1fc8">psa_aead_finish</a>(<a class="code" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation,</div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>&#160;                             uint8_t *ciphertext,</div><div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>&#160;                             <span class="keywordtype">size_t</span> ciphertext_size,</div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>&#160;                             <span class="keywordtype">size_t</span> *ciphertext_length,</div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>&#160;                             uint8_t *tag,</div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>&#160;                             <span class="keywordtype">size_t</span> tag_size,</div><div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>&#160;                             <span class="keywordtype">size_t</span> *tag_length);</div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>&#160;</div><div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__aead.html#gaaed211fc61977c859d6ff07f39f59219">psa_aead_verify</a>(<a class="code" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation,</div><div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>&#160;                             <span class="keyword">const</span> uint8_t *tag,</div><div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>&#160;                             <span class="keywordtype">size_t</span> tag_length);</div><div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>&#160;</div><div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__aead.html#gae8a5f93d92318c8f592ee9fbb9d36ba0">psa_aead_abort</a>(<a class="code" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation);</div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>&#160;</div><div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__asymmetric.html#ga1b0db9d345b5048cdd39357ac2d56c07">psa_asymmetric_sign</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>&#160;                                 <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg,</div><div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>&#160;                                 <span class="keyword">const</span> uint8_t *hash,</div><div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>&#160;                                 <span class="keywordtype">size_t</span> hash_length,</div><div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160;                                 uint8_t *signature,</div><div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>&#160;                                 <span class="keywordtype">size_t</span> signature_size,</div><div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>&#160;                                 <span class="keywordtype">size_t</span> *signature_length);</div><div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>&#160;</div><div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__asymmetric.html#ga1b8e964c8d927e3d632325d762959eb7">psa_asymmetric_verify</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>&#160;                                   <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg,</div><div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>&#160;                                   <span class="keyword">const</span> uint8_t *hash,</div><div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>&#160;                                   <span class="keywordtype">size_t</span> hash_length,</div><div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>&#160;                                   <span class="keyword">const</span> uint8_t *signature,</div><div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>&#160;                                   <span class="keywordtype">size_t</span> signature_length);</div><div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>&#160;</div><div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__asymmetric.html#gad429293b7b0bf2a830b9540a02552004">psa_asymmetric_encrypt</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>&#160;                                    <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg,</div><div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>&#160;                                    <span class="keyword">const</span> uint8_t *input,</div><div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>&#160;                                    <span class="keywordtype">size_t</span> input_length,</div><div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>&#160;                                    <span class="keyword">const</span> uint8_t *salt,</div><div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>&#160;                                    <span class="keywordtype">size_t</span> salt_length,</div><div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>&#160;                                    uint8_t *output,</div><div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>&#160;                                    <span class="keywordtype">size_t</span> output_size,</div><div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>&#160;                                    <span class="keywordtype">size_t</span> *output_length);</div><div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>&#160;</div><div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__asymmetric.html#ga34b55fbaee23dba1a677186fc66a556e">psa_asymmetric_decrypt</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>&#160;                                    <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg,</div><div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>&#160;                                    <span class="keyword">const</span> uint8_t *input,</div><div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>&#160;                                    <span class="keywordtype">size_t</span> input_length,</div><div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>&#160;                                    <span class="keyword">const</span> uint8_t *salt,</div><div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>&#160;                                    <span class="keywordtype">size_t</span> salt_length,</div><div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>&#160;                                    uint8_t *output,</div><div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>&#160;                                    <span class="keywordtype">size_t</span> output_size,</div><div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>&#160;                                    <span class="keywordtype">size_t</span> *output_length);</div><div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>&#160;</div><div class="line"><a name="l02808"></a><span class="lineno"><a class="line" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b"> 2808</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>psa_crypto_generator_s <a class="code" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a>;</div><div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>&#160;</div><div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>&#160;<span class="preprocessor">#ifdef __DOXYGEN_ONLY__</span></div><div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>&#160;<span class="comment">/* This is an example definition for documentation purposes.</span></div><div class="line"><a name="l02817"></a><span class="lineno"> 2817</span>&#160;<span class="comment"> * Implementations should define a suitable value in `crypto_struct.h`.</span></div><div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02819"></a><span class="lineno"><a class="line" href="group__generators.html#ga4788b471385fc667876fbd8a0d3fe062"> 2819</a></span>&#160;<span class="preprocessor">#define PSA_CRYPTO_GENERATOR_INIT {0}</span></div><div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>&#160;</div><div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>&#160;<span class="keyword">static</span> <a class="code" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> psa_crypto_generator_init(<span class="keywordtype">void</span>);</div><div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>&#160;</div><div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__generators.html#ga7453491e3b440193be2c5dccc2040fd2">psa_get_generator_capacity</a>(<span class="keyword">const</span> <a class="code" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator,</div><div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>&#160;                                        <span class="keywordtype">size_t</span> *capacity);</div><div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>&#160;</div><div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__generators.html#ga45676ec3c719622f95caaf926f44bb6e">psa_set_generator_capacity</a>(<a class="code" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator,</div><div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>&#160;                                        <span class="keywordtype">size_t</span> capacity);</div><div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>&#160;</div><div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__generators.html#gab5712ad29b78c2b170e64cc5bcfc1bce">psa_generator_read</a>(<a class="code" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator,</div><div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>&#160;                                uint8_t *output,</div><div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>&#160;                                <span class="keywordtype">size_t</span> output_length);</div><div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>&#160;</div><div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__generators.html#ga7fcdf07cd37279ca167db484053da894">psa_generator_import_key</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>&#160;                                      <a class="code" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> type,</div><div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>&#160;                                      <span class="keywordtype">size_t</span> bits,</div><div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>&#160;                                      <a class="code" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator);</div><div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>&#160;</div><div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__generators.html#ga563ca64537d90368899286b36d8cf7f3">psa_generator_abort</a>(<a class="code" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator);</div><div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>&#160;</div><div class="line"><a name="l02971"></a><span class="lineno"><a class="line" href="group__generators.html#gac3222df9b9ecca4d33ae56a7b8fbb1c9"> 2971</a></span>&#160;<span class="preprocessor">#define PSA_GENERATOR_UNBRIDLED_CAPACITY ((size_t)(-1))</span></div><div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>&#160;</div><div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__derivation.html#ga1825696be813dfac2b8d3d02717e71c5">psa_key_derivation_setup</a>(<a class="code" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator,</div><div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>&#160;                                      <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg);</div><div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>&#160;</div><div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__derivation.html#ga1b30e888db65c71f5337900848e1b03f">psa_key_derivation_input_bytes</a>(<a class="code" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator,</div><div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>&#160;                                            <a class="code" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a> step,</div><div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>&#160;                                            <span class="keyword">const</span> uint8_t *data,</div><div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>&#160;                                            <span class="keywordtype">size_t</span> data_length);</div><div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>&#160;</div><div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__derivation.html#ga9e5f549aa1f6f3863a07008d3d98f91a">psa_key_derivation_input_key</a>(<a class="code" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator,</div><div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>&#160;                                          <a class="code" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a> step,</div><div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>&#160;                                          <a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle);</div><div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>&#160;</div><div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__derivation.html#ga2c7fe304cacc141ffb91553548abc5d2">psa_key_agreement</a>(<a class="code" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator,</div><div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>&#160;                               <a class="code" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a> step,</div><div class="line"><a name="l03161"></a><span class="lineno"> 3161</span>&#160;                               <a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> private_key,</div><div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>&#160;                               <span class="keyword">const</span> uint8_t *peer_key,</div><div class="line"><a name="l03163"></a><span class="lineno"> 3163</span>&#160;                               <span class="keywordtype">size_t</span> peer_key_length);</div><div class="line"><a name="l03164"></a><span class="lineno"> 3164</span>&#160;</div><div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__derivation.html#gaf1b12eff66a1a0020b5bdc8d0e910006">psa_key_agreement_raw_shared_secret</a>(<a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg,</div><div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>&#160;                                                 <a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> private_key,</div><div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>&#160;                                                 <span class="keyword">const</span> uint8_t *peer_key,</div><div class="line"><a name="l03212"></a><span class="lineno"> 3212</span>&#160;                                                 <span class="keywordtype">size_t</span> peer_key_length,</div><div class="line"><a name="l03213"></a><span class="lineno"> 3213</span>&#160;                                                 uint8_t *output,</div><div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>&#160;                                                 <span class="keywordtype">size_t</span> output_size,</div><div class="line"><a name="l03215"></a><span class="lineno"> 3215</span>&#160;                                                 <span class="keywordtype">size_t</span> *output_length);</div><div class="line"><a name="l03216"></a><span class="lineno"> 3216</span>&#160;</div><div class="line"><a name="l03246"></a><span class="lineno"> 3246</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__random.html#ga1985eae417dfbccedf50d5fff54ea8c5">psa_generate_random</a>(uint8_t *output,</div><div class="line"><a name="l03247"></a><span class="lineno"> 3247</span>&#160;                                 <span class="keywordtype">size_t</span> output_size);</div><div class="line"><a name="l03248"></a><span class="lineno"> 3248</span>&#160;</div><div class="line"><a name="l03254"></a><span class="lineno"><a class="line" href="structpsa__generate__key__extra__rsa.html"> 3254</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l03255"></a><span class="lineno"><a class="line" href="structpsa__generate__key__extra__rsa.html#a53ccb9e4375f3c9af6e3ecfe111ce11d"> 3255</a></span>&#160;    uint32_t <a class="code" href="structpsa__generate__key__extra__rsa.html#a53ccb9e4375f3c9af6e3ecfe111ce11d">e</a>; </div><div class="line"><a name="l03256"></a><span class="lineno"> 3256</span>&#160;} <a class="code" href="structpsa__generate__key__extra__rsa.html">psa_generate_key_extra_rsa</a>;</div><div class="line"><a name="l03257"></a><span class="lineno"> 3257</span>&#160;</div><div class="line"><a name="l03323"></a><span class="lineno"> 3323</span>&#160;<a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> <a class="code" href="group__random.html#ga72921520494b4f007a3afb904cd9ecdd">psa_generate_key</a>(<a class="code" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle,</div><div class="line"><a name="l03324"></a><span class="lineno"> 3324</span>&#160;                              <a class="code" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> type,</div><div class="line"><a name="l03325"></a><span class="lineno"> 3325</span>&#160;                              <span class="keywordtype">size_t</span> bits,</div><div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>&#160;                              <span class="keyword">const</span> <span class="keywordtype">void</span> *extra,</div><div class="line"><a name="l03327"></a><span class="lineno"> 3327</span>&#160;                              <span class="keywordtype">size_t</span> extra_size);</div><div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>&#160;</div><div class="line"><a name="l03331"></a><span class="lineno"> 3331</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>&#160;}</div><div class="line"><a name="l03333"></a><span class="lineno"> 3333</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l03334"></a><span class="lineno"> 3334</span>&#160;</div><div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>&#160;<span class="comment">/* The file &quot;crypto_sizes.h&quot; contains definitions for size calculation</span></div><div class="line"><a name="l03336"></a><span class="lineno"> 3336</span>&#160;<span class="comment"> * macros whose definitions are implementation-specific. */</span></div><div class="line"><a name="l03337"></a><span class="lineno"> 3337</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="crypto__sizes_8h.html">crypto_sizes.h</a>&quot;</span></div><div class="line"><a name="l03338"></a><span class="lineno"> 3338</span>&#160;</div><div class="line"><a name="l03339"></a><span class="lineno"> 3339</span>&#160;<span class="comment">/* The file &quot;crypto_struct.h&quot; contains definitions for</span></div><div class="line"><a name="l03340"></a><span class="lineno"> 3340</span>&#160;<span class="comment"> * implementation-specific structs that are declared above. */</span></div><div class="line"><a name="l03341"></a><span class="lineno"> 3341</span>&#160;<span class="preprocessor">#include &quot;crypto_struct.h&quot;</span></div><div class="line"><a name="l03342"></a><span class="lineno"> 3342</span>&#160;</div><div class="line"><a name="l03343"></a><span class="lineno"> 3343</span>&#160;<span class="comment">/* The file &quot;crypto_extra.h&quot; contains vendor-specific definitions. This</span></div><div class="line"><a name="l03344"></a><span class="lineno"> 3344</span>&#160;<span class="comment"> * can include vendor-defined algorithms, extra functions, etc. */</span></div><div class="line"><a name="l03345"></a><span class="lineno"> 3345</span>&#160;<span class="preprocessor">#include &quot;crypto_extra.h&quot;</span></div><div class="line"><a name="l03346"></a><span class="lineno"> 3346</span>&#160;</div><div class="line"><a name="l03347"></a><span class="lineno"> 3347</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* PSA_CRYPTO_H */</span><span class="preprocessor"></span></div><div class="ttc" id="group__cipher_html_ga2a7fc79a9d150d42dba99f40ee3a185e"><div class="ttname"><a href="group__cipher.html#ga2a7fc79a9d150d42dba99f40ee3a185e">psa_cipher_encrypt_setup</a></div><div class="ttdeci">psa_status_t psa_cipher_encrypt_setup(psa_cipher_operation_t *operation, psa_key_handle_t handle, psa_algorithm_t alg)</div></div>
+<div class="ttc" id="group__MAC_html_gac92b2930d6728e1be4d011c05d485822"><div class="ttname"><a href="group__MAC.html#gac92b2930d6728e1be4d011c05d485822">psa_mac_verify_finish</a></div><div class="ttdeci">psa_status_t psa_mac_verify_finish(psa_mac_operation_t *operation, const uint8_t *mac, size_t mac_length)</div></div>
+<div class="ttc" id="group__random_html_ga1985eae417dfbccedf50d5fff54ea8c5"><div class="ttname"><a href="group__random.html#ga1985eae417dfbccedf50d5fff54ea8c5">psa_generate_random</a></div><div class="ttdeci">psa_status_t psa_generate_random(uint8_t *output, size_t output_size)</div><div class="ttdoc">Generate random bytes. </div></div>
+<div class="ttc" id="group__aead_html_ga3eadcf2a29f662129ea4fb3454969ba2"><div class="ttname"><a href="group__aead.html#ga3eadcf2a29f662129ea4fb3454969ba2">psa_aead_generate_nonce</a></div><div class="ttdeci">psa_status_t psa_aead_generate_nonce(psa_aead_operation_t *operation, unsigned char *nonce, size_t nonce_size, size_t *nonce_length)</div></div>
+<div class="ttc" id="group__import__export_html_ga902b9a7a6cf34d6111668be777b05eaf"><div class="ttname"><a href="group__import__export.html#ga902b9a7a6cf34d6111668be777b05eaf">psa_export_key</a></div><div class="ttdeci">psa_status_t psa_export_key(psa_key_handle_t handle, uint8_t *data, size_t data_size, size_t *data_length)</div><div class="ttdoc">Export a key in binary format. </div></div>
+<div class="ttc" id="group__key__management_html_ga40094b77b7a42b9c8e158395113f1a35"><div class="ttname"><a href="group__key__management.html#ga40094b77b7a42b9c8e158395113f1a35">psa_allocate_key</a></div><div class="ttdeci">psa_status_t psa_allocate_key(psa_key_handle_t *handle)</div></div>
+<div class="ttc" id="group__asymmetric_html_ga1b8e964c8d927e3d632325d762959eb7"><div class="ttname"><a href="group__asymmetric.html#ga1b8e964c8d927e3d632325d762959eb7">psa_asymmetric_verify</a></div><div class="ttdeci">psa_status_t psa_asymmetric_verify(psa_key_handle_t handle, psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, const uint8_t *signature, size_t signature_length)</div><div class="ttdoc">Verify the signature a hash or short message using a public key. </div></div>
+<div class="ttc" id="group__cipher_html_gaddf8504e5367cd0efb4415bdec004f44"><div class="ttname"><a href="group__cipher.html#gaddf8504e5367cd0efb4415bdec004f44">psa_cipher_decrypt_setup</a></div><div class="ttdeci">psa_status_t psa_cipher_decrypt_setup(psa_cipher_operation_t *operation, psa_key_handle_t handle, psa_algorithm_t alg)</div></div>
+<div class="ttc" id="group__policy_html_ga7746662b7503e484774d0ecb5d8ac2ab"><div class="ttname"><a href="group__policy.html#ga7746662b7503e484774d0ecb5d8ac2ab">psa_key_policy_get_usage</a></div><div class="ttdeci">psa_key_usage_t psa_key_policy_get_usage(const psa_key_policy_t *policy)</div><div class="ttdoc">Retrieve the usage field of a policy structure. </div></div>
+<div class="ttc" id="group__derivation_html_gaf1b12eff66a1a0020b5bdc8d0e910006"><div class="ttname"><a href="group__derivation.html#gaf1b12eff66a1a0020b5bdc8d0e910006">psa_key_agreement_raw_shared_secret</a></div><div class="ttdeci">psa_status_t psa_key_agreement_raw_shared_secret(psa_algorithm_t alg, psa_key_handle_t private_key, const uint8_t *peer_key, size_t peer_key_length, uint8_t *output, size_t output_size, size_t *output_length)</div></div>
+<div class="ttc" id="group__aead_html_ga47265dc4852f1476f852752218fd12b2"><div class="ttname"><a href="group__aead.html#ga47265dc4852f1476f852752218fd12b2">psa_aead_encrypt_setup</a></div><div class="ttdeci">psa_status_t psa_aead_encrypt_setup(psa_aead_operation_t *operation, psa_key_handle_t handle, psa_algorithm_t alg)</div></div>
+<div class="ttc" id="group__MAC_html_ga08e2e8c21bfe762a907266f3bdd1d07c"><div class="ttname"><a href="group__MAC.html#ga08e2e8c21bfe762a907266f3bdd1d07c">psa_mac_verify</a></div><div class="ttdeci">psa_status_t psa_mac_verify(psa_key_handle_t handle, psa_algorithm_t alg, const uint8_t *input, size_t input_length, const uint8_t *mac, const size_t mac_length)</div></div>
+<div class="ttc" id="group__random_html_ga72921520494b4f007a3afb904cd9ecdd"><div class="ttname"><a href="group__random.html#ga72921520494b4f007a3afb904cd9ecdd">psa_generate_key</a></div><div class="ttdeci">psa_status_t psa_generate_key(psa_key_handle_t handle, psa_key_type_t type, size_t bits, const void *extra, size_t extra_size)</div><div class="ttdoc">Generate a key or key pair. </div></div>
+<div class="ttc" id="group__key__management_html_gaa09b720d299dfe6b9f41c36e448078eb"><div class="ttname"><a href="group__key__management.html#gaa09b720d299dfe6b9f41c36e448078eb">psa_close_key</a></div><div class="ttdeci">psa_status_t psa_close_key(psa_key_handle_t handle)</div></div>
+<div class="ttc" id="group__cipher_html_ga43d5991711ec45c98af0c1d99f6e0216"><div class="ttname"><a href="group__cipher.html#ga43d5991711ec45c98af0c1d99f6e0216">psa_cipher_decrypt</a></div><div class="ttdeci">psa_status_t psa_cipher_decrypt(psa_key_handle_t handle, psa_algorithm_t alg, const uint8_t *input, size_t input_length, uint8_t *output, size_t output_size, size_t *output_length)</div></div>
+<div class="ttc" id="group__import__export_html_gad760d1f0d4e60972c78cbb4c8a528256"><div class="ttname"><a href="group__import__export.html#gad760d1f0d4e60972c78cbb4c8a528256">psa_export_public_key</a></div><div class="ttdeci">psa_status_t psa_export_public_key(psa_key_handle_t handle, uint8_t *data, size_t data_size, size_t *data_length)</div><div class="ttdoc">Export a public key or the public part of a key pair in binary format. </div></div>
+<div class="ttc" id="group__aead_html_ga14f6a01afbaa8c5b3d8c5d345cbaa3ed"><div class="ttname"><a href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a></div><div class="ttdeci">struct psa_aead_operation_s psa_aead_operation_t</div><div class="ttdef"><b>Definition:</b> crypto.h:2083</div></div>
+<div class="ttc" id="group__derivation_html_ga1b30e888db65c71f5337900848e1b03f"><div class="ttname"><a href="group__derivation.html#ga1b30e888db65c71f5337900848e1b03f">psa_key_derivation_input_bytes</a></div><div class="ttdeci">psa_status_t psa_key_derivation_input_bytes(psa_crypto_generator_t *generator, psa_key_derivation_step_t step, const uint8_t *data, size_t data_length)</div></div>
+<div class="ttc" id="group__import__export_html_gae260b92e32ac5d63f7dfc6ffdf6536f7"><div class="ttname"><a href="group__import__export.html#gae260b92e32ac5d63f7dfc6ffdf6536f7">psa_get_key_domain_parameters</a></div><div class="ttdeci">psa_status_t psa_get_key_domain_parameters(psa_key_handle_t handle, uint8_t *data, size_t data_size, size_t *data_length)</div><div class="ttdoc">Get domain parameters for a key. </div></div>
+<div class="ttc" id="crypto__types_8h_html"><div class="ttname"><a href="crypto__types_8h.html">crypto_types.h</a></div><div class="ttdoc">PSA cryptography module: type aliases. </div></div>
+<div class="ttc" id="group__import__export_html_ga5c1c24176cfb1517a8806235b3162a9d"><div class="ttname"><a href="group__import__export.html#ga5c1c24176cfb1517a8806235b3162a9d">psa_copy_key</a></div><div class="ttdeci">psa_status_t psa_copy_key(psa_key_handle_t source_handle, psa_key_handle_t target_handle, const psa_key_policy_t *constraint)</div></div>
+<div class="ttc" id="group__generators_html_ga563ca64537d90368899286b36d8cf7f3"><div class="ttname"><a href="group__generators.html#ga563ca64537d90368899286b36d8cf7f3">psa_generator_abort</a></div><div class="ttdeci">psa_status_t psa_generator_abort(psa_crypto_generator_t *generator)</div></div>
+<div class="ttc" id="group__derivation_html_gaac4eeacd36596c548b3a48fc06c5048b"><div class="ttname"><a href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a></div><div class="ttdeci">uint16_t psa_key_derivation_step_t</div><div class="ttdoc">Encoding of the step of a key derivation. </div><div class="ttdef"><b>Definition:</b> crypto_types.h:106</div></div>
+<div class="ttc" id="group__key__lifetimes_html_ga11e986351c65bd3dc3c0fe2cd9926e4b"><div class="ttname"><a href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">psa_key_id_t</a></div><div class="ttdeci">uint32_t psa_key_id_t</div><div class="ttdef"><b>Definition:</b> crypto_types.h:88</div></div>
+<div class="ttc" id="group__hash_html_gac69f7f19d96a56c28cf3799d11b12156"><div class="ttname"><a href="group__hash.html#gac69f7f19d96a56c28cf3799d11b12156">psa_hash_compute</a></div><div class="ttdeci">psa_status_t psa_hash_compute(psa_algorithm_t alg, const uint8_t *input, size_t input_length, uint8_t *hash, size_t hash_size, size_t *hash_length)</div></div>
+<div class="ttc" id="group__cipher_html_gafd0caea99cf1052527e4089d37f5ab91"><div class="ttname"><a href="group__cipher.html#gafd0caea99cf1052527e4089d37f5ab91">psa_cipher_update</a></div><div class="ttdeci">psa_status_t psa_cipher_update(psa_cipher_operation_t *operation, const uint8_t *input, size_t input_length, unsigned char *output, size_t output_size, size_t *output_length)</div></div>
+<div class="ttc" id="group__cipher_html_ga1359b2101f31637496ce7cc36c6e3d42"><div class="ttname"><a href="group__cipher.html#ga1359b2101f31637496ce7cc36c6e3d42">psa_cipher_set_iv</a></div><div class="ttdeci">psa_status_t psa_cipher_set_iv(psa_cipher_operation_t *operation, const unsigned char *iv, size_t iv_length)</div></div>
+<div class="ttc" id="group__generators_html_gab5712ad29b78c2b170e64cc5bcfc1bce"><div class="ttname"><a href="group__generators.html#gab5712ad29b78c2b170e64cc5bcfc1bce">psa_generator_read</a></div><div class="ttdeci">psa_status_t psa_generator_read(psa_crypto_generator_t *generator, uint8_t *output, size_t output_length)</div></div>
+<div class="ttc" id="group__hash_html_ga65b16ef97d7f650899b7db4b7d1112ff"><div class="ttname"><a href="group__hash.html#ga65b16ef97d7f650899b7db4b7d1112ff">psa_hash_update</a></div><div class="ttdeci">psa_status_t psa_hash_update(psa_hash_operation_t *operation, const uint8_t *input, size_t input_length)</div></div>
+<div class="ttc" id="group__hash_html_ga0bb6dbd3c310648c3cf7d202413ff0bc"><div class="ttname"><a href="group__hash.html#ga0bb6dbd3c310648c3cf7d202413ff0bc">psa_hash_compare</a></div><div class="ttdeci">psa_status_t psa_hash_compare(psa_algorithm_t alg, const uint8_t *input, size_t input_length, const uint8_t *hash, const size_t hash_length)</div></div>
+<div class="ttc" id="group__aead_html_ga759791bbe1763b377c3b5447641f1fc8"><div class="ttname"><a href="group__aead.html#ga759791bbe1763b377c3b5447641f1fc8">psa_aead_finish</a></div><div class="ttdeci">psa_status_t psa_aead_finish(psa_aead_operation_t *operation, uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length, uint8_t *tag, size_t tag_size, size_t *tag_length)</div></div>
+<div class="ttc" id="group__asymmetric_html_gad429293b7b0bf2a830b9540a02552004"><div class="ttname"><a href="group__asymmetric.html#gad429293b7b0bf2a830b9540a02552004">psa_asymmetric_encrypt</a></div><div class="ttdeci">psa_status_t psa_asymmetric_encrypt(psa_key_handle_t handle, psa_algorithm_t alg, const uint8_t *input, size_t input_length, const uint8_t *salt, size_t salt_length, uint8_t *output, size_t output_size, size_t *output_length)</div><div class="ttdoc">Encrypt a short message with a public key. </div></div>
+<div class="ttc" id="group__asymmetric_html_ga34b55fbaee23dba1a677186fc66a556e"><div class="ttname"><a href="group__asymmetric.html#ga34b55fbaee23dba1a677186fc66a556e">psa_asymmetric_decrypt</a></div><div class="ttdeci">psa_status_t psa_asymmetric_decrypt(psa_key_handle_t handle, psa_algorithm_t alg, const uint8_t *input, size_t input_length, const uint8_t *salt, size_t salt_length, uint8_t *output, size_t output_size, size_t *output_length)</div><div class="ttdoc">Decrypt a short message with a private key. </div></div>
+<div class="ttc" id="crypto__values_8h_html"><div class="ttname"><a href="crypto__values_8h.html">crypto_values.h</a></div><div class="ttdoc">PSA cryptography module: macros to build and analyze integer values. </div></div>
+<div class="ttc" id="group__import__export_html_ga091da8d3d39137fd6ad59f2b10234300"><div class="ttname"><a href="group__import__export.html#ga091da8d3d39137fd6ad59f2b10234300">psa_set_key_domain_parameters</a></div><div class="ttdeci">psa_status_t psa_set_key_domain_parameters(psa_key_handle_t handle, psa_key_type_t type, const uint8_t *data, size_t data_length)</div><div class="ttdoc">Set domain parameters for a key. </div></div>
+<div class="ttc" id="group__MAC_html_gac22bc0125580c96724a09226cfbc97f2"><div class="ttname"><a href="group__MAC.html#gac22bc0125580c96724a09226cfbc97f2">psa_mac_sign_finish</a></div><div class="ttdeci">psa_status_t psa_mac_sign_finish(psa_mac_operation_t *operation, uint8_t *mac, size_t mac_size, size_t *mac_length)</div></div>
+<div class="ttc" id="group__cipher_html_ga1dcb58b8befe23f8a4d7a1d49c99249b"><div class="ttname"><a href="group__cipher.html#ga1dcb58b8befe23f8a4d7a1d49c99249b">psa_cipher_finish</a></div><div class="ttdeci">psa_status_t psa_cipher_finish(psa_cipher_operation_t *operation, uint8_t *output, size_t output_size, size_t *output_length)</div></div>
+<div class="ttc" id="group__MAC_html_gaa721a59ae6d085ec90c7dc918879a027"><div class="ttname"><a href="group__MAC.html#gaa721a59ae6d085ec90c7dc918879a027">psa_mac_verify_setup</a></div><div class="ttdeci">psa_status_t psa_mac_verify_setup(psa_mac_operation_t *operation, psa_key_handle_t handle, psa_algorithm_t alg)</div></div>
+<div class="ttc" id="group__cipher_html_ga44857cf5e0c3d134a3c560f8ff5b50aa"><div class="ttname"><a href="group__cipher.html#ga44857cf5e0c3d134a3c560f8ff5b50aa">psa_cipher_generate_iv</a></div><div class="ttdeci">psa_status_t psa_cipher_generate_iv(psa_cipher_operation_t *operation, unsigned char *iv, size_t iv_size, size_t *iv_length)</div></div>
+<div class="ttc" id="group__aead_html_ga6d0eed03f832e5c9c91cb8adf2882569"><div class="ttname"><a href="group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569">psa_aead_update_ad</a></div><div class="ttdeci">psa_status_t psa_aead_update_ad(psa_aead_operation_t *operation, const uint8_t *input, size_t input_length)</div></div>
+<div class="ttc" id="group__hash_html_ga7be923c5700c9c70ef77ee9b76d1a5c0"><div class="ttname"><a href="group__hash.html#ga7be923c5700c9c70ef77ee9b76d1a5c0">psa_hash_verify</a></div><div class="ttdeci">psa_status_t psa_hash_verify(psa_hash_operation_t *operation, const uint8_t *hash, size_t hash_length)</div></div>
+<div class="ttc" id="group__derivation_html_ga9e5f549aa1f6f3863a07008d3d98f91a"><div class="ttname"><a href="group__derivation.html#ga9e5f549aa1f6f3863a07008d3d98f91a">psa_key_derivation_input_key</a></div><div class="ttdeci">psa_status_t psa_key_derivation_input_key(psa_crypto_generator_t *generator, psa_key_derivation_step_t step, psa_key_handle_t handle)</div></div>
+<div class="ttc" id="group__aead_html_gad3431e28d05002c2a7b0760610176050"><div class="ttname"><a href="group__aead.html#gad3431e28d05002c2a7b0760610176050">psa_aead_set_lengths</a></div><div class="ttdeci">psa_status_t psa_aead_set_lengths(psa_aead_operation_t *operation, size_t ad_length, size_t plaintext_length)</div></div>
+<div class="ttc" id="group__aead_html_gaa8ce6527f2e227f1071fadbf2099793b"><div class="ttname"><a href="group__aead.html#gaa8ce6527f2e227f1071fadbf2099793b">psa_aead_decrypt</a></div><div class="ttdeci">psa_status_t psa_aead_decrypt(psa_key_handle_t handle, psa_algorithm_t alg, const uint8_t *nonce, size_t nonce_length, const uint8_t *additional_data, size_t additional_data_length, const uint8_t *ciphertext, size_t ciphertext_length, uint8_t *plaintext, size_t plaintext_size, size_t *plaintext_length)</div></div>
+<div class="ttc" id="group__generators_html_ga7fcdf07cd37279ca167db484053da894"><div class="ttname"><a href="group__generators.html#ga7fcdf07cd37279ca167db484053da894">psa_generator_import_key</a></div><div class="ttdeci">psa_status_t psa_generator_import_key(psa_key_handle_t handle, psa_key_type_t type, size_t bits, psa_crypto_generator_t *generator)</div></div>
+<div class="ttc" id="group__hash_html_ga39673348f3302b4646bd780034a5aeda"><div class="ttname"><a href="group__hash.html#ga39673348f3302b4646bd780034a5aeda">psa_hash_clone</a></div><div class="ttdeci">psa_status_t psa_hash_clone(const psa_hash_operation_t *source_operation, psa_hash_operation_t *target_operation)</div></div>
+<div class="ttc" id="group__policy_html_gaed087d1386b807edee66b2e445ba9111"><div class="ttname"><a href="group__policy.html#gaed087d1386b807edee66b2e445ba9111">psa_get_key_policy</a></div><div class="ttdeci">psa_status_t psa_get_key_policy(psa_key_handle_t handle, psa_key_policy_t *policy)</div><div class="ttdoc">Get the usage policy for a key slot. </div></div>
+<div class="ttc" id="structpsa__generate__key__extra__rsa_html_a53ccb9e4375f3c9af6e3ecfe111ce11d"><div class="ttname"><a href="structpsa__generate__key__extra__rsa.html#a53ccb9e4375f3c9af6e3ecfe111ce11d">psa_generate_key_extra_rsa::e</a></div><div class="ttdeci">uint32_t e</div><div class="ttdef"><b>Definition:</b> crypto.h:3255</div></div>
+<div class="ttc" id="group__crypto__types_html_gac2e4d47f1300d73c2f829a6d99252d69"><div class="ttname"><a href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a></div><div class="ttdeci">uint32_t psa_algorithm_t</div><div class="ttdoc">Encoding of a cryptographic algorithm. </div><div class="ttdef"><b>Definition:</b> crypto_types.h:74</div></div>
+<div class="ttc" id="group__hash_html_ga3c4205d2ce66c4095fc5c78c25273fab"><div class="ttname"><a href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a></div><div class="ttdeci">struct psa_hash_operation_s psa_hash_operation_t</div><div class="ttdef"><b>Definition:</b> crypto.h:908</div></div>
+<div class="ttc" id="group__aead_html_ga44de092cf58bb6c820c5c80a6c51610d"><div class="ttname"><a href="group__aead.html#ga44de092cf58bb6c820c5c80a6c51610d">psa_aead_encrypt</a></div><div class="ttdeci">psa_status_t psa_aead_encrypt(psa_key_handle_t handle, psa_algorithm_t alg, const uint8_t *nonce, size_t nonce_length, const uint8_t *additional_data, size_t additional_data_length, const uint8_t *plaintext, size_t plaintext_length, uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length)</div></div>
+<div class="ttc" id="group__MAC_html_gacd8dd54855ba1bc0a03f104f252884fd"><div class="ttname"><a href="group__MAC.html#gacd8dd54855ba1bc0a03f104f252884fd">psa_mac_abort</a></div><div class="ttdeci">psa_status_t psa_mac_abort(psa_mac_operation_t *operation)</div></div>
+<div class="ttc" id="group__hash_html_ga8d72896cf70fc4d514c5c6b978912515"><div class="ttname"><a href="group__hash.html#ga8d72896cf70fc4d514c5c6b978912515">psa_hash_setup</a></div><div class="ttdeci">psa_status_t psa_hash_setup(psa_hash_operation_t *operation, psa_algorithm_t alg)</div></div>
+<div class="ttc" id="group__aead_html_ga439896519d4a367ec86b47f201884152"><div class="ttname"><a href="group__aead.html#ga439896519d4a367ec86b47f201884152">psa_aead_decrypt_setup</a></div><div class="ttdeci">psa_status_t psa_aead_decrypt_setup(psa_aead_operation_t *operation, psa_key_handle_t handle, psa_algorithm_t alg)</div></div>
+<div class="ttc" id="group__policy_html_ga7bb9de71337e0e98de843aa7f9b55f25"><div class="ttname"><a href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a></div><div class="ttdeci">uint32_t psa_key_usage_t</div><div class="ttdoc">Encoding of permitted usage on a key. </div><div class="ttdef"><b>Definition:</b> crypto_types.h:97</div></div>
+<div class="ttc" id="group__policy_html_gaf553efd409845b6d09ff25ce2ba36607"><div class="ttname"><a href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a></div><div class="ttdeci">struct psa_key_policy_s psa_key_policy_t</div><div class="ttdef"><b>Definition:</b> crypto.h:128</div></div>
+<div class="ttc" id="group__import__export_html_ga165085fc1bc7a78b91792fdd94ae102c"><div class="ttname"><a href="group__import__export.html#ga165085fc1bc7a78b91792fdd94ae102c">psa_destroy_key</a></div><div class="ttdeci">psa_status_t psa_destroy_key(psa_key_handle_t handle)</div><div class="ttdoc">Destroy a key. </div></div>
+<div class="ttc" id="group__policy_html_gac16792fd6d375a5f76d372090df40607"><div class="ttname"><a href="group__policy.html#gac16792fd6d375a5f76d372090df40607">psa_key_policy_set_usage</a></div><div class="ttdeci">void psa_key_policy_set_usage(psa_key_policy_t *policy, psa_key_usage_t usage, psa_algorithm_t alg)</div><div class="ttdoc">Set the standard fields of a policy structure. </div></div>
+<div class="ttc" id="group__initialization_html_ga2de150803fc2f7dc6101d5af7e921dd9"><div class="ttname"><a href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9">psa_crypto_init</a></div><div class="ttdeci">psa_status_t psa_crypto_init(void)</div><div class="ttdoc">Library initialization. </div></div>
+<div class="ttc" id="group__platform_html_gabf6d5fd4e2ea89ecd425c88f057e7f75"><div class="ttname"><a href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a></div><div class="ttdeci">_unsigned_integral_type_ psa_key_handle_t</div><div class="ttdoc">Key handle. </div><div class="ttdef"><b>Definition:</b> crypto.h:47</div></div>
+<div class="ttc" id="group__MAC_html_gace78d9b51394f9d4f77952963665897a"><div class="ttname"><a href="group__MAC.html#gace78d9b51394f9d4f77952963665897a">psa_mac_compute</a></div><div class="ttdeci">psa_status_t psa_mac_compute(psa_key_handle_t handle, psa_algorithm_t alg, const uint8_t *input, size_t input_length, uint8_t *mac, size_t mac_size, size_t *mac_length)</div></div>
+<div class="ttc" id="crypto__sizes_8h_html"><div class="ttname"><a href="crypto__sizes_8h.html">crypto_sizes.h</a></div><div class="ttdoc">PSA cryptography module: Mbed TLS buffer size macros. </div></div>
+<div class="ttc" id="group__derivation_html_ga2c7fe304cacc141ffb91553548abc5d2"><div class="ttname"><a href="group__derivation.html#ga2c7fe304cacc141ffb91553548abc5d2">psa_key_agreement</a></div><div class="ttdeci">psa_status_t psa_key_agreement(psa_crypto_generator_t *generator, psa_key_derivation_step_t step, psa_key_handle_t private_key, const uint8_t *peer_key, size_t peer_key_length)</div></div>
+<div class="ttc" id="group__key__management_html_gaa9f1c848cf78b80fe2a7b18bb7ccec50"><div class="ttname"><a href="group__key__management.html#gaa9f1c848cf78b80fe2a7b18bb7ccec50">psa_open_key</a></div><div class="ttdeci">psa_status_t psa_open_key(psa_key_lifetime_t lifetime, psa_key_id_t id, psa_key_handle_t *handle)</div></div>
+<div class="ttc" id="group__MAC_html_ga5560af371497babefe03c9da4e8a1c05"><div class="ttname"><a href="group__MAC.html#ga5560af371497babefe03c9da4e8a1c05">psa_mac_update</a></div><div class="ttdeci">psa_status_t psa_mac_update(psa_mac_operation_t *operation, const uint8_t *input, size_t input_length)</div></div>
+<div class="ttc" id="group__aead_html_ga40641d0721ca7fe01bbcd9ef635fbc46"><div class="ttname"><a href="group__aead.html#ga40641d0721ca7fe01bbcd9ef635fbc46">psa_aead_set_nonce</a></div><div class="ttdeci">psa_status_t psa_aead_set_nonce(psa_aead_operation_t *operation, const unsigned char *nonce, size_t nonce_length)</div></div>
+<div class="ttc" id="group__hash_html_gab0b4d5f9912a615559497a467b532928"><div class="ttname"><a href="group__hash.html#gab0b4d5f9912a615559497a467b532928">psa_hash_abort</a></div><div class="ttdeci">psa_status_t psa_hash_abort(psa_hash_operation_t *operation)</div></div>
+<div class="ttc" id="group__key__management_html_ga1e4825ab59260aeb3bdbb3ff07210022"><div class="ttname"><a href="group__key__management.html#ga1e4825ab59260aeb3bdbb3ff07210022">psa_get_key_lifetime</a></div><div class="ttdeci">psa_status_t psa_get_key_lifetime(psa_key_handle_t handle, psa_key_lifetime_t *lifetime)</div><div class="ttdoc">Retrieve the lifetime of an open key. </div></div>
+<div class="ttc" id="group__aead_html_ga3b105de2088cef7c3d9e2fd8048c841c"><div class="ttname"><a href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">psa_aead_update</a></div><div class="ttdeci">psa_status_t psa_aead_update(psa_aead_operation_t *operation, const uint8_t *input, size_t input_length, unsigned char *output, size_t output_size, size_t *output_length)</div></div>
+<div class="ttc" id="group__cipher_html_ga1399de29db657e3737bb09927aae51fa"><div class="ttname"><a href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a></div><div class="ttdeci">struct psa_cipher_operation_s psa_cipher_operation_t</div><div class="ttdef"><b>Definition:</b> crypto.h:1625</div></div>
+<div class="ttc" id="group__crypto__types_html_ga578159487dfc7096cb191b0d2befe628"><div class="ttname"><a href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a></div><div class="ttdeci">uint32_t psa_key_type_t</div><div class="ttdoc">Encoding of a key type. </div><div class="ttdef"><b>Definition:</b> crypto_types.h:61</div></div>
+<div class="ttc" id="group__aead_html_gaaed211fc61977c859d6ff07f39f59219"><div class="ttname"><a href="group__aead.html#gaaed211fc61977c859d6ff07f39f59219">psa_aead_verify</a></div><div class="ttdeci">psa_status_t psa_aead_verify(psa_aead_operation_t *operation, const uint8_t *tag, size_t tag_length)</div></div>
+<div class="ttc" id="group__MAC_html_ga78f0838b0c4e3db28b26355624d4bd37"><div class="ttname"><a href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a></div><div class="ttdeci">struct psa_mac_operation_s psa_mac_operation_t</div><div class="ttdef"><b>Definition:</b> crypto.h:1240</div></div>
+<div class="ttc" id="group__aead_html_gae8a5f93d92318c8f592ee9fbb9d36ba0"><div class="ttname"><a href="group__aead.html#gae8a5f93d92318c8f592ee9fbb9d36ba0">psa_aead_abort</a></div><div class="ttdeci">psa_status_t psa_aead_abort(psa_aead_operation_t *operation)</div></div>
+<div class="ttc" id="group__policy_html_gaadf16b89ace53e1d2cb5bcb0aef24c86"><div class="ttname"><a href="group__policy.html#gaadf16b89ace53e1d2cb5bcb0aef24c86">psa_key_policy_get_algorithm</a></div><div class="ttdeci">psa_algorithm_t psa_key_policy_get_algorithm(const psa_key_policy_t *policy)</div><div class="ttdoc">Retrieve the algorithm field of a policy structure. </div></div>
+<div class="ttc" id="group__key__lifetimes_html_ga6821ff6dd39dc2bc370ded760ad8b0cf"><div class="ttname"><a href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a></div><div class="ttdeci">uint32_t psa_key_lifetime_t</div><div class="ttdef"><b>Definition:</b> crypto_types.h:84</div></div>
+<div class="ttc" id="group__generators_html_ga7453491e3b440193be2c5dccc2040fd2"><div class="ttname"><a href="group__generators.html#ga7453491e3b440193be2c5dccc2040fd2">psa_get_generator_capacity</a></div><div class="ttdeci">psa_status_t psa_get_generator_capacity(const psa_crypto_generator_t *generator, size_t *capacity)</div></div>
+<div class="ttc" id="group__policy_html_ga1e2a6e50b621864f95d438222a3c640b"><div class="ttname"><a href="group__policy.html#ga1e2a6e50b621864f95d438222a3c640b">psa_set_key_policy</a></div><div class="ttdeci">psa_status_t psa_set_key_policy(psa_key_handle_t handle, const psa_key_policy_t *policy)</div><div class="ttdoc">Set the usage policy on a key slot. </div></div>
+<div class="ttc" id="group__key__management_html_ga4108f255d3eaa6d23a7a14b684af8d7c"><div class="ttname"><a href="group__key__management.html#ga4108f255d3eaa6d23a7a14b684af8d7c">psa_create_key</a></div><div class="ttdeci">psa_status_t psa_create_key(psa_key_lifetime_t lifetime, psa_key_id_t id, psa_key_handle_t *handle)</div></div>
+<div class="ttc" id="group__import__export_html_gac9f999cb4d098663d56095afe81a453a"><div class="ttname"><a href="group__import__export.html#gac9f999cb4d098663d56095afe81a453a">psa_import_key</a></div><div class="ttdeci">psa_status_t psa_import_key(psa_key_handle_t handle, psa_key_type_t type, const uint8_t *data, size_t data_length)</div><div class="ttdoc">Import a key in binary format. </div></div>
+<div class="ttc" id="group__error_html_ga05676e70ba5c6a7565aff3c36677c1f9"><div class="ttname"><a href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a></div><div class="ttdeci">int32_t psa_status_t</div><div class="ttdoc">Function return status. </div><div class="ttdef"><b>Definition:</b> crypto_types.h:51</div></div>
+<div class="ttc" id="group__cipher_html_gaad482cdca2098bca0620596aaa02eaa4"><div class="ttname"><a href="group__cipher.html#gaad482cdca2098bca0620596aaa02eaa4">psa_cipher_abort</a></div><div class="ttdeci">psa_status_t psa_cipher_abort(psa_cipher_operation_t *operation)</div></div>
+<div class="ttc" id="group__generators_html_ga45676ec3c719622f95caaf926f44bb6e"><div class="ttname"><a href="group__generators.html#ga45676ec3c719622f95caaf926f44bb6e">psa_set_generator_capacity</a></div><div class="ttdeci">psa_status_t psa_set_generator_capacity(psa_crypto_generator_t *generator, size_t capacity)</div></div>
+<div class="ttc" id="group__cipher_html_gac76dda492d9a1ba6b327bff610ec17b2"><div class="ttname"><a href="group__cipher.html#gac76dda492d9a1ba6b327bff610ec17b2">psa_cipher_encrypt</a></div><div class="ttdeci">psa_status_t psa_cipher_encrypt(psa_key_handle_t handle, psa_algorithm_t alg, const uint8_t *input, size_t input_length, uint8_t *output, size_t output_size, size_t *output_length)</div></div>
+<div class="ttc" id="group__MAC_html_gad33f2b15119593571ca6b8e7c757ab0e"><div class="ttname"><a href="group__MAC.html#gad33f2b15119593571ca6b8e7c757ab0e">psa_mac_sign_setup</a></div><div class="ttdeci">psa_status_t psa_mac_sign_setup(psa_mac_operation_t *operation, psa_key_handle_t handle, psa_algorithm_t alg)</div></div>
+<div class="ttc" id="group__derivation_html_ga1825696be813dfac2b8d3d02717e71c5"><div class="ttname"><a href="group__derivation.html#ga1825696be813dfac2b8d3d02717e71c5">psa_key_derivation_setup</a></div><div class="ttdeci">psa_status_t psa_key_derivation_setup(psa_crypto_generator_t *generator, psa_algorithm_t alg)</div></div>
+<div class="ttc" id="group__import__export_html_gae8939902d6977ea8ad13eb7b4db9a042"><div class="ttname"><a href="group__import__export.html#gae8939902d6977ea8ad13eb7b4db9a042">psa_get_key_information</a></div><div class="ttdeci">psa_status_t psa_get_key_information(psa_key_handle_t handle, psa_key_type_t *type, size_t *bits)</div><div class="ttdoc">Get basic metadata about a key. </div></div>
+<div class="ttc" id="group__asymmetric_html_ga1b0db9d345b5048cdd39357ac2d56c07"><div class="ttname"><a href="group__asymmetric.html#ga1b0db9d345b5048cdd39357ac2d56c07">psa_asymmetric_sign</a></div><div class="ttdeci">psa_status_t psa_asymmetric_sign(psa_key_handle_t handle, psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, uint8_t *signature, size_t signature_size, size_t *signature_length)</div><div class="ttdoc">Sign a hash or short message with a private key. </div></div>
+<div class="ttc" id="group__generators_html_ga1f894c4fba202ef8e307d72caf489e3b"><div class="ttname"><a href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a></div><div class="ttdeci">struct psa_crypto_generator_s psa_crypto_generator_t</div><div class="ttdef"><b>Definition:</b> crypto.h:2808</div></div>
+<div class="ttc" id="group__hash_html_ga4795fd06a0067b0adcd92e9627b8c97e"><div class="ttname"><a href="group__hash.html#ga4795fd06a0067b0adcd92e9627b8c97e">psa_hash_finish</a></div><div class="ttdeci">psa_status_t psa_hash_finish(psa_hash_operation_t *operation, uint8_t *hash, size_t hash_size, size_t *hash_length)</div></div>
+<div class="ttc" id="structpsa__generate__key__extra__rsa_html"><div class="ttname"><a href="structpsa__generate__key__extra__rsa.html">psa_generate_key_extra_rsa</a></div><div class="ttdef"><b>Definition:</b> crypto.h:3254</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/crypto__enum_8h.html b/docs/html/crypto__enum_8h.html
new file mode 100644
index 0000000..851333c
--- /dev/null
+++ b/docs/html/crypto__enum_8h.html
@@ -0,0 +1,697 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: psa/crypto_enum.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">Working draft</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_7dae9cfde651cd3cb034485ce5e391b9.html">psa</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a>  </div>
+  <div class="headertitle">
+<div class="title">crypto_enum.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>PSA cryptography module: Integer encodings.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br />
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for crypto_enum.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="crypto__enum_8h__incl.png" border="0" usemap="#psa_2crypto__enum_8h" alt=""/></div>
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="crypto__enum_8h__dep__incl.png" border="0" usemap="#psa_2crypto__enum_8hdep" alt=""/></div>
+<map name="psa_2crypto__enum_8hdep" id="psa_2crypto__enum_8hdep">
+<area shape="rect" id="node2" href="crypto_8h.html" title="Platform Security Architecture cryptography module. " alt="" coords="25,80,119,107"/>
+</map>
+</div>
+</div>
+<p><a href="crypto__enum_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga4cc859e2c66ca381c7418db3527a65e1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)0)</td></tr>
+<tr class="separator:ga4cc859e2c66ca381c7418db3527a65e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga24d5fdcdd759f846f79d9e581c63a83f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga24d5fdcdd759f846f79d9e581c63a83f">PSA_ERROR_UNKNOWN_ERROR</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)1)</td></tr>
+<tr class="separator:ga24d5fdcdd759f846f79d9e581c63a83f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1dcc6d130633ed5db8942257581b55dd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)2)</td></tr>
+<tr class="separator:ga1dcc6d130633ed5db8942257581b55dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4d1b8dd8526177a15a210b7afc1accb1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)3)</td></tr>
+<tr class="separator:ga4d1b8dd8526177a15a210b7afc1accb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga695025f4ec11249aee7ea3d0f65e01c8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)4)</td></tr>
+<tr class="separator:ga695025f4ec11249aee7ea3d0f65e01c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac2fee3a51249fbea45360aaa911f3e58"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#gac2fee3a51249fbea45360aaa911f3e58">PSA_ERROR_OCCUPIED_SLOT</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)5)</td></tr>
+<tr class="separator:gac2fee3a51249fbea45360aaa911f3e58"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaba00e3e6ceb2b12965a81e5ac02ae040"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)6)</td></tr>
+<tr class="separator:gaba00e3e6ceb2b12965a81e5ac02ae040"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga933d40fa2a591004f2e93aa91e11db84"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)7)</td></tr>
+<tr class="separator:ga933d40fa2a591004f2e93aa91e11db84"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga798df25a505ebf931f7bec1f80f1f85f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)8)</td></tr>
+<tr class="separator:ga798df25a505ebf931f7bec1f80f1f85f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga91b2ad8a867517a2651f1b076c5216e5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)9)</td></tr>
+<tr class="separator:ga91b2ad8a867517a2651f1b076c5216e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga897a45eb206a6f6b7be7ffbe36f0d766"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga897a45eb206a6f6b7be7ffbe36f0d766">PSA_ERROR_INSUFFICIENT_STORAGE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)10)</td></tr>
+<tr class="separator:ga897a45eb206a6f6b7be7ffbe36f0d766"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5cdb6948371d49e916106249020ea3f7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)11)</td></tr>
+<tr class="separator:ga5cdb6948371d49e916106249020ea3f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadd169a1af2707862b95fb9df91dfc37d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#gadd169a1af2707862b95fb9df91dfc37d">PSA_ERROR_STORAGE_FAILURE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)12)</td></tr>
+<tr class="separator:gadd169a1af2707862b95fb9df91dfc37d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga08b10e70fa5ff0b05c631d9f8f6b2c6b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)13)</td></tr>
+<tr class="separator:ga08b10e70fa5ff0b05c631d9f8f6b2c6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2c5dda1485cb54f2385cb9c1279a7004"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)14)</td></tr>
+<tr class="separator:ga2c5dda1485cb54f2385cb9c1279a7004"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4deb59fec02297ec5d8b42178323f675"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga4deb59fec02297ec5d8b42178323f675">PSA_ERROR_INSUFFICIENT_ENTROPY</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)15)</td></tr>
+<tr class="separator:ga4deb59fec02297ec5d8b42178323f675"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga35927f755d232c4766de600f2c49e9f2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga35927f755d232c4766de600f2c49e9f2">PSA_ERROR_INVALID_SIGNATURE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)16)</td></tr>
+<tr class="separator:ga35927f755d232c4766de600f2c49e9f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gabe29594edbfb152cf153975b0597ac48"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#gabe29594edbfb152cf153975b0597ac48">PSA_ERROR_INVALID_PADDING</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)17)</td></tr>
+<tr class="separator:gabe29594edbfb152cf153975b0597ac48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf1fa61f72e9e5b4a848c991bea495767"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#gaf1fa61f72e9e5b4a848c991bea495767">PSA_ERROR_INSUFFICIENT_CAPACITY</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)18)</td></tr>
+<tr class="separator:gaf1fa61f72e9e5b4a848c991bea495767"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadf22718935657c2c3168c228204085f9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)19)</td></tr>
+<tr class="separator:gadf22718935657c2c3168c228204085f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafce7ab2b54ce97ea5bff73f13a9f3e5b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gafce7ab2b54ce97ea5bff73f13a9f3e5b">PSA_KEY_TYPE_NONE</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x00000000)</td></tr>
+<tr class="separator:gafce7ab2b54ce97ea5bff73f13a9f3e5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8dbaed2fdb1ebae8aa127ad3988516f7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga8dbaed2fdb1ebae8aa127ad3988516f7">PSA_KEY_TYPE_VENDOR_FLAG</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x80000000)</td></tr>
+<tr class="separator:ga8dbaed2fdb1ebae8aa127ad3988516f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6eeda1b2a1550050cf68dbcac35ad8ac"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_CATEGORY_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70000000)</td></tr>
+<tr class="separator:ga6eeda1b2a1550050cf68dbcac35ad8ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8f214beb04334be08f927f227f097ef1"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_CATEGORY_SYMMETRIC</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000000)</td></tr>
+<tr class="separator:ga8f214beb04334be08f927f227f097ef1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab8af75718c5e7b8987720a3fe8abb18f"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_CATEGORY_RAW</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x50000000)</td></tr>
+<tr class="separator:gab8af75718c5e7b8987720a3fe8abb18f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga58b975beeee1f937cecb71c8051c6357"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x60000000)</td></tr>
+<tr class="separator:ga58b975beeee1f937cecb71c8051c6357"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga708196a91ec0384de98e092b9a16f5e8"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_CATEGORY_KEY_PAIR</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70000000)</td></tr>
+<tr class="separator:ga708196a91ec0384de98e092b9a16f5e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5a77cb4db2d02ffce77631339e3240f4"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_CATEGORY_FLAG_PAIR</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x10000000)</td></tr>
+<tr class="separator:ga5a77cb4db2d02ffce77631339e3240f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadbe4c086a6562aefe344bc79e51bdfd3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gadbe4c086a6562aefe344bc79e51bdfd3">PSA_KEY_TYPE_IS_VENDOR_DEFINED</a>(type)&#160;&#160;&#160;(((type) &amp; <a class="el" href="group__crypto__types.html#ga8dbaed2fdb1ebae8aa127ad3988516f7">PSA_KEY_TYPE_VENDOR_FLAG</a>) != 0)</td></tr>
+<tr class="separator:gadbe4c086a6562aefe344bc79e51bdfd3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaef86ce4e810e1c2c76068ac874bfef54"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaef86ce4e810e1c2c76068ac874bfef54">PSA_KEY_TYPE_IS_UNSTRUCTURED</a>(type)</td></tr>
+<tr class="separator:gaef86ce4e810e1c2c76068ac874bfef54"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab138ae2ebf2905dfbaf4154db2620939"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gab138ae2ebf2905dfbaf4154db2620939">PSA_KEY_TYPE_IS_ASYMMETRIC</a>(type)</td></tr>
+<tr class="separator:gab138ae2ebf2905dfbaf4154db2620939"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac674a0f059bc0cb72b47f0c517b4f45b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gac674a0f059bc0cb72b47f0c517b4f45b">PSA_KEY_TYPE_IS_PUBLIC_KEY</a>(type)&#160;&#160;&#160;(((type) &amp; PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY)</td></tr>
+<tr class="separator:gac674a0f059bc0cb72b47f0c517b4f45b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac14c6d6e1b2b7f4a92a7b757465cff29"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gac14c6d6e1b2b7f4a92a7b757465cff29">PSA_KEY_TYPE_IS_KEYPAIR</a>(type)&#160;&#160;&#160;(((type) &amp; PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_KEY_PAIR)</td></tr>
+<tr class="separator:gac14c6d6e1b2b7f4a92a7b757465cff29"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf09f1ca1de6a7e7cff0fe516f3f6c91d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaf09f1ca1de6a7e7cff0fe516f3f6c91d">PSA_KEY_TYPE_KEYPAIR_OF_PUBLIC_KEY</a>(type)&#160;&#160;&#160;((type) | PSA_KEY_TYPE_CATEGORY_FLAG_PAIR)</td></tr>
+<tr class="separator:gaf09f1ca1de6a7e7cff0fe516f3f6c91d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gace08e46dd7cbf642d50d982a25d02bec"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a>(type)&#160;&#160;&#160;((type) &amp; ~PSA_KEY_TYPE_CATEGORY_FLAG_PAIR)</td></tr>
+<tr class="separator:gace08e46dd7cbf642d50d982a25d02bec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa97f92025533102616b32d571c940d80"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa97f92025533102616b32d571c940d80">PSA_KEY_TYPE_RAW_DATA</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x50000001)</td></tr>
+<tr class="separator:gaa97f92025533102616b32d571c940d80"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga92d989f4ca64abd00f463defd773a6f8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga92d989f4ca64abd00f463defd773a6f8">PSA_KEY_TYPE_HMAC</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x51000000)</td></tr>
+<tr class="separator:ga92d989f4ca64abd00f463defd773a6f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae871b2357b8593f33bfd51abbf93ebb1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gae871b2357b8593f33bfd51abbf93ebb1">PSA_KEY_TYPE_DERIVE</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x52000000)</td></tr>
+<tr class="separator:gae871b2357b8593f33bfd51abbf93ebb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6ee54579dcf278c677eda4bb1a29575e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga6ee54579dcf278c677eda4bb1a29575e">PSA_KEY_TYPE_AES</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000001)</td></tr>
+<tr class="separator:ga6ee54579dcf278c677eda4bb1a29575e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga577562bfbbc691c820d55ec308333138"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga577562bfbbc691c820d55ec308333138">PSA_KEY_TYPE_DES</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000002)</td></tr>
+<tr class="separator:ga577562bfbbc691c820d55ec308333138"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad8e5da742343fd5519f9d8a630c2ed81"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gad8e5da742343fd5519f9d8a630c2ed81">PSA_KEY_TYPE_CAMELLIA</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000003)</td></tr>
+<tr class="separator:gad8e5da742343fd5519f9d8a630c2ed81"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae4d46e83f910dcaa126000a8ed03cde9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gae4d46e83f910dcaa126000a8ed03cde9">PSA_KEY_TYPE_ARC4</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000004)</td></tr>
+<tr class="separator:gae4d46e83f910dcaa126000a8ed03cde9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9ba0878f56c8bcd1995ac017a74f513b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga9ba0878f56c8bcd1995ac017a74f513b">PSA_KEY_TYPE_RSA_PUBLIC_KEY</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x60010000)</td></tr>
+<tr class="separator:ga9ba0878f56c8bcd1995ac017a74f513b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga581f50687f5d650456925278948f2799"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga581f50687f5d650456925278948f2799">PSA_KEY_TYPE_RSA_KEYPAIR</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70010000)</td></tr>
+<tr class="separator:ga581f50687f5d650456925278948f2799"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0e1d8f241228e49c9cadadfb4579ef1a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga0e1d8f241228e49c9cadadfb4579ef1a">PSA_KEY_TYPE_IS_RSA</a>(type)&#160;&#160;&#160;(<a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a>(type) == <a class="el" href="group__crypto__types.html#ga9ba0878f56c8bcd1995ac017a74f513b">PSA_KEY_TYPE_RSA_PUBLIC_KEY</a>)</td></tr>
+<tr class="separator:ga0e1d8f241228e49c9cadadfb4579ef1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5e7439c2905136366c3a876e62e5ddfc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga5e7439c2905136366c3a876e62e5ddfc">PSA_KEY_TYPE_DSA_PUBLIC_KEY</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x60020000)</td></tr>
+<tr class="separator:ga5e7439c2905136366c3a876e62e5ddfc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga011010ee28c20388f3d89fb27088ed62"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga011010ee28c20388f3d89fb27088ed62">PSA_KEY_TYPE_DSA_KEYPAIR</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70020000)</td></tr>
+<tr class="separator:ga011010ee28c20388f3d89fb27088ed62"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga273fdfcf23eb0624f8b63d2321cf95c1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga273fdfcf23eb0624f8b63d2321cf95c1">PSA_KEY_TYPE_IS_DSA</a>(type)&#160;&#160;&#160;(<a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a>(type) == <a class="el" href="group__crypto__types.html#ga5e7439c2905136366c3a876e62e5ddfc">PSA_KEY_TYPE_DSA_PUBLIC_KEY</a>)</td></tr>
+<tr class="separator:ga273fdfcf23eb0624f8b63d2321cf95c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad8d37a32a305dda9fb4af1707aace47c"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x60030000)</td></tr>
+<tr class="separator:gad8d37a32a305dda9fb4af1707aace47c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6754658749714c6ac674bdf6d2d40767"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_ECC_KEYPAIR_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70030000)</td></tr>
+<tr class="separator:ga6754658749714c6ac674bdf6d2d40767"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadc2a3c0041ac1d0a2b6f421d8e089b25"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_ECC_CURVE_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x0000ffff)</td></tr>
+<tr class="separator:gadc2a3c0041ac1d0a2b6f421d8e089b25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadf3ad65d157bf5282849c954bf3f51af"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gadf3ad65d157bf5282849c954bf3f51af">PSA_KEY_TYPE_ECC_KEYPAIR</a>(curve)&#160;&#160;&#160;(PSA_KEY_TYPE_ECC_KEYPAIR_BASE | (curve))</td></tr>
+<tr class="separator:gadf3ad65d157bf5282849c954bf3f51af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad54c03d3b47020e571a72cd01d978cf2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gad54c03d3b47020e571a72cd01d978cf2">PSA_KEY_TYPE_ECC_PUBLIC_KEY</a>(curve)&#160;&#160;&#160;(PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE | (curve))</td></tr>
+<tr class="separator:gad54c03d3b47020e571a72cd01d978cf2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga88e01fa06b585654689a99bcc06bbe66"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga88e01fa06b585654689a99bcc06bbe66">PSA_KEY_TYPE_IS_ECC</a>(type)</td></tr>
+<tr class="separator:ga88e01fa06b585654689a99bcc06bbe66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7bf101b671e8cf26f4cb08fcb679db4b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga7bf101b671e8cf26f4cb08fcb679db4b">PSA_KEY_TYPE_IS_ECC_KEYPAIR</a>(type)</td></tr>
+<tr class="separator:ga7bf101b671e8cf26f4cb08fcb679db4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5af146a173b0c84d7e737e2fb6a3c0a7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga5af146a173b0c84d7e737e2fb6a3c0a7">PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY</a>(type)</td></tr>
+<tr class="separator:ga5af146a173b0c84d7e737e2fb6a3c0a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0c567210e6f80aa8f2aa87efa7a3a3f9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga0c567210e6f80aa8f2aa87efa7a3a3f9">PSA_KEY_TYPE_GET_CURVE</a>(type)</td></tr>
+<tr class="separator:ga0c567210e6f80aa8f2aa87efa7a3a3f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4201013d5947c375fae7311b0f98bac7"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT163K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0001)</td></tr>
+<tr class="separator:ga4201013d5947c375fae7311b0f98bac7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaca8816b785f492a8795b5276977d1369"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT163R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0002)</td></tr>
+<tr class="separator:gaca8816b785f492a8795b5276977d1369"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4ab7a853ceb3ad0a525ecb571633a1ca"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT163R2</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0003)</td></tr>
+<tr class="separator:ga4ab7a853ceb3ad0a525ecb571633a1ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac9fd11da90ca67649a5f51a158afe5f3"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT193R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0004)</td></tr>
+<tr class="separator:gac9fd11da90ca67649a5f51a158afe5f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7a77f5e385f6439dae5857a7f35756eb"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT193R2</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0005)</td></tr>
+<tr class="separator:ga7a77f5e385f6439dae5857a7f35756eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga36e409c36983e41db5db202b1d2095b5"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT233K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0006)</td></tr>
+<tr class="separator:ga36e409c36983e41db5db202b1d2095b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga54997a9f8ef752c6d717171e01c31019"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT233R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0007)</td></tr>
+<tr class="separator:ga54997a9f8ef752c6d717171e01c31019"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaabccf2759188c3e98d82faa5d8dfcd8c"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT239K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0008)</td></tr>
+<tr class="separator:gaabccf2759188c3e98d82faa5d8dfcd8c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga28c765d75773b5fe083219e7c0b054f9"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT283K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0009)</td></tr>
+<tr class="separator:ga28c765d75773b5fe083219e7c0b054f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafd8ecacea0d9e7e1a0247c047baf3372"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT283R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x000a)</td></tr>
+<tr class="separator:gafd8ecacea0d9e7e1a0247c047baf3372"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2bf301617cc84a6f2b36a86cc29eaf4d"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT409K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x000b)</td></tr>
+<tr class="separator:ga2bf301617cc84a6f2b36a86cc29eaf4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae41caa1cc16d3c35769b6edcb62c8957"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT409R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x000c)</td></tr>
+<tr class="separator:gae41caa1cc16d3c35769b6edcb62c8957"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2043aa519549a6194d132d81816879bc"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT571K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x000d)</td></tr>
+<tr class="separator:ga2043aa519549a6194d132d81816879bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1607d2cb9591b56dbe1295bedc33e19e"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT571R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x000e)</td></tr>
+<tr class="separator:ga1607d2cb9591b56dbe1295bedc33e19e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2ad14935d244d93ee0e4cfe9b1f218a4"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP160K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x000f)</td></tr>
+<tr class="separator:ga2ad14935d244d93ee0e4cfe9b1f218a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga35ed41203039e94eb4855cc70f28f7f0"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP160R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0010)</td></tr>
+<tr class="separator:ga35ed41203039e94eb4855cc70f28f7f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac465f57c34914a01aea8c220a613dfe6"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP160R2</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0011)</td></tr>
+<tr class="separator:gac465f57c34914a01aea8c220a613dfe6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga58c806d45ab350287ddc49da833bd558"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP192K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0012)</td></tr>
+<tr class="separator:ga58c806d45ab350287ddc49da833bd558"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5aa3ceff4603fa3fafd8f2286c5d3e4a"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP192R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0013)</td></tr>
+<tr class="separator:ga5aa3ceff4603fa3fafd8f2286c5d3e4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gabfaaab2eaab0ac360e41c1aff6133cdf"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP224K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0014)</td></tr>
+<tr class="separator:gabfaaab2eaab0ac360e41c1aff6133cdf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8d1d21b6b87ba4158235b876ae79031d"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP224R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0015)</td></tr>
+<tr class="separator:ga8d1d21b6b87ba4158235b876ae79031d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaaa61941f815aff976a1debd910b1704c"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP256K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0016)</td></tr>
+<tr class="separator:gaaa61941f815aff976a1debd910b1704c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga11224270225c2b2dbfa2ab01073a4e93"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP256R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0017)</td></tr>
+<tr class="separator:ga11224270225c2b2dbfa2ab01073a4e93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3e870a36493143507a01a28c70790fa3"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP384R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0018)</td></tr>
+<tr class="separator:ga3e870a36493143507a01a28c70790fa3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4482ff6155006ff509071c32ce263fdf"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP521R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0019)</td></tr>
+<tr class="separator:ga4482ff6155006ff509071c32ce263fdf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa999b69c56af0cc1cebf4596f8578191"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_BRAINPOOL_P256R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x001a)</td></tr>
+<tr class="separator:gaa999b69c56af0cc1cebf4596f8578191"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga79f95ed8050f2dc7750cbac212c6e687"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_BRAINPOOL_P384R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x001b)</td></tr>
+<tr class="separator:ga79f95ed8050f2dc7750cbac212c6e687"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa03a2dc6096f336be3d68a1f7405e86c"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_BRAINPOOL_P512R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x001c)</td></tr>
+<tr class="separator:gaa03a2dc6096f336be3d68a1f7405e86c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac94faf3b8d9884221541f51f26b11c7a"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_CURVE25519</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x001d)</td></tr>
+<tr class="separator:gac94faf3b8d9884221541f51f26b11c7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga902b0e91eff920873b3b59c740854305"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_CURVE448</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x001e)</td></tr>
+<tr class="separator:ga902b0e91eff920873b3b59c740854305"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacaa366bdeb0413e63e87a667c5457b2e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gacaa366bdeb0413e63e87a667c5457b2e">PSA_BLOCK_CIPHER_BLOCK_SIZE</a>(type)</td></tr>
+<tr class="separator:gacaa366bdeb0413e63e87a667c5457b2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf5d76750b6cfe3e7f0c8e9eee1162318"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_VENDOR_FLAG</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x80000000)</td></tr>
+<tr class="separator:gaf5d76750b6cfe3e7f0c8e9eee1162318"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga25e918c465b4421dbfaedad6b693d110"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x7f000000)</td></tr>
+<tr class="separator:ga25e918c465b4421dbfaedad6b693d110"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafd048e1835b80e6daaff7fddce699757"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_HASH</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000000)</td></tr>
+<tr class="separator:gafd048e1835b80e6daaff7fddce699757"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5e6e0039d0b0d18afb3e13e5b9602b3a"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_MAC</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x02000000)</td></tr>
+<tr class="separator:ga5e6e0039d0b0d18afb3e13e5b9602b3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga68228a619db59eba93fd13e9129dbfe2"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_CIPHER</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04000000)</td></tr>
+<tr class="separator:ga68228a619db59eba93fd13e9129dbfe2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga37fdd9cac2552f1568f38e091a826549"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_AEAD</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x06000000)</td></tr>
+<tr class="separator:ga37fdd9cac2552f1568f38e091a826549"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga68a0af1dd89b33fb1e53139f654988f6"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_SIGN</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10000000)</td></tr>
+<tr class="separator:ga68a0af1dd89b33fb1e53139f654988f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga72f46c8256b760b174e6db61a61cd608"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x12000000)</td></tr>
+<tr class="separator:ga72f46c8256b760b174e6db61a61cd608"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga808e397a4891c612df4a5b20eebc2fac"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_KEY_AGREEMENT</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x22000000)</td></tr>
+<tr class="separator:ga808e397a4891c612df4a5b20eebc2fac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac185b2274dd4e5f0b97c43334c2e478f"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_KEY_DERIVATION</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x30000000)</td></tr>
+<tr class="separator:gac185b2274dd4e5f0b97c43334c2e478f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga46ccba3464541e05a428ddc5c176e7af"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_KEY_SELECTION</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x31000000)</td></tr>
+<tr class="separator:ga46ccba3464541e05a428ddc5c176e7af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2396d8ba67096b3ebc69bc351a74c78b"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_VENDOR_DEFINED</b>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_VENDOR_FLAG) != 0)</td></tr>
+<tr class="separator:ga2396d8ba67096b3ebc69bc351a74c78b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac9280662bb482590b4b33d1dcd32930f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">PSA_ALG_IS_HASH</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_HASH)</td></tr>
+<tr class="separator:gac9280662bb482590b4b33d1dcd32930f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaca7aee4c9dde316b3b1a150a26eab776"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaca7aee4c9dde316b3b1a150a26eab776">PSA_ALG_IS_MAC</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_MAC)</td></tr>
+<tr class="separator:gaca7aee4c9dde316b3b1a150a26eab776"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1d1a5a402ad89a2e68f12bfb535490eb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga1d1a5a402ad89a2e68f12bfb535490eb">PSA_ALG_IS_CIPHER</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_CIPHER)</td></tr>
+<tr class="separator:ga1d1a5a402ad89a2e68f12bfb535490eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1d44829d60065eaa4ac9a703e7d6abc8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">PSA_ALG_IS_AEAD</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_AEAD)</td></tr>
+<tr class="separator:ga1d44829d60065eaa4ac9a703e7d6abc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6d490d0904e0698f6c1268a89d72ff31"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga6d490d0904e0698f6c1268a89d72ff31">PSA_ALG_IS_SIGN</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_SIGN)</td></tr>
+<tr class="separator:ga6d490d0904e0698f6c1268a89d72ff31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga41d2ee937d54efd76bd54a97b2ebc08a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga41d2ee937d54efd76bd54a97b2ebc08a">PSA_ALG_IS_ASYMMETRIC_ENCRYPTION</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION)</td></tr>
+<tr class="separator:ga41d2ee937d54efd76bd54a97b2ebc08a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab19961aac97f3856f83057b04ba7c5f5"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_KEY_SELECTION_FLAG</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000000)</td></tr>
+<tr class="separator:gab19961aac97f3856f83057b04ba7c5f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga59753742cb06553bd22751bbef472b6f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga59753742cb06553bd22751bbef472b6f">PSA_ALG_IS_KEY_AGREEMENT</a>(alg)</td></tr>
+<tr class="separator:ga59753742cb06553bd22751bbef472b6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf8b90c648aa53dbd06c236695e300cd0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaf8b90c648aa53dbd06c236695e300cd0">PSA_ALG_IS_KEY_DERIVATION</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_KEY_DERIVATION)</td></tr>
+<tr class="separator:gaf8b90c648aa53dbd06c236695e300cd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga51b1834ee5e98c6a83c2cfc7699f9077"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga51b1834ee5e98c6a83c2cfc7699f9077">PSA_ALG_IS_KEY_SELECTION</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_KEY_SELECTION)</td></tr>
+<tr class="separator:ga51b1834ee5e98c6a83c2cfc7699f9077"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac41a7077aef55bb20c629c8949d43c57"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_HASH_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x000000ff)</td></tr>
+<tr class="separator:gac41a7077aef55bb20c629c8949d43c57"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab076ca67238cb4ebd81556db8f3dbac1"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_MD2</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000001)</td></tr>
+<tr class="separator:gab076ca67238cb4ebd81556db8f3dbac1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaac7ab8c28c117ef4ddf01affc8d3ceb2"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_MD4</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000002)</td></tr>
+<tr class="separator:gaac7ab8c28c117ef4ddf01affc8d3ceb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gade591d9286d23382eb5cec099c84180d"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_MD5</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000003)</td></tr>
+<tr class="separator:gade591d9286d23382eb5cec099c84180d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6c5d3a32cda59086f07b85ef007033dd"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_RIPEMD160</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000004)</td></tr>
+<tr class="separator:ga6c5d3a32cda59086f07b85ef007033dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3fca4e9f9ad4a1158817d1850dee82e5"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_SHA_1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000005)</td></tr>
+<tr class="separator:ga3fca4e9f9ad4a1158817d1850dee82e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga25d6a3244d10a7148fe6b026d1979f7b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga25d6a3244d10a7148fe6b026d1979f7b">PSA_ALG_SHA_224</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000008)</td></tr>
+<tr class="separator:ga25d6a3244d10a7148fe6b026d1979f7b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga619471f978e13cdd0a1e37145e4bf341"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga619471f978e13cdd0a1e37145e4bf341">PSA_ALG_SHA_256</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000009)</td></tr>
+<tr class="separator:ga619471f978e13cdd0a1e37145e4bf341"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga58af64dd9a86a287e8da9ed7739eead4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga58af64dd9a86a287e8da9ed7739eead4">PSA_ALG_SHA_384</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x0100000a)</td></tr>
+<tr class="separator:ga58af64dd9a86a287e8da9ed7739eead4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafba3ae409f46d3dd7f37a0910660c3e9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gafba3ae409f46d3dd7f37a0910660c3e9">PSA_ALG_SHA_512</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x0100000b)</td></tr>
+<tr class="separator:gafba3ae409f46d3dd7f37a0910660c3e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3fe2d7c3c80e3186ca78d16a35d5d931"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga3fe2d7c3c80e3186ca78d16a35d5d931">PSA_ALG_SHA_512_224</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x0100000c)</td></tr>
+<tr class="separator:ga3fe2d7c3c80e3186ca78d16a35d5d931"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5910b3964c14e9613e8643a45b09c2d4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga5910b3964c14e9613e8643a45b09c2d4">PSA_ALG_SHA_512_256</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x0100000d)</td></tr>
+<tr class="separator:ga5910b3964c14e9613e8643a45b09c2d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga16f5fe34ccce68c2fada1224c054a999"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga16f5fe34ccce68c2fada1224c054a999">PSA_ALG_SHA3_224</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000010)</td></tr>
+<tr class="separator:ga16f5fe34ccce68c2fada1224c054a999"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaace70d9515489bbe3c5e7ac1b7d9155b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaace70d9515489bbe3c5e7ac1b7d9155b">PSA_ALG_SHA3_256</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000011)</td></tr>
+<tr class="separator:gaace70d9515489bbe3c5e7ac1b7d9155b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab0f079257ea75e2acfe2fc3b38c78cd8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gab0f079257ea75e2acfe2fc3b38c78cd8">PSA_ALG_SHA3_384</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000012)</td></tr>
+<tr class="separator:gab0f079257ea75e2acfe2fc3b38c78cd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga37e5dbe936dddb155e76f2997de27188"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga37e5dbe936dddb155e76f2997de27188">PSA_ALG_SHA3_512</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000013)</td></tr>
+<tr class="separator:ga37e5dbe936dddb155e76f2997de27188"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gabba3fcfee55533b0e25350e78a942e07"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_MAC_SUBCATEGORY_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x00c00000)</td></tr>
+<tr class="separator:gabba3fcfee55533b0e25350e78a942e07"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0675192b82720fb8c9037a95bdeb6c88"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_HMAC_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x02800000)</td></tr>
+<tr class="separator:ga0675192b82720fb8c9037a95bdeb6c88"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga70f397425684b3efcde1e0e34c28261f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga70f397425684b3efcde1e0e34c28261f">PSA_ALG_HMAC</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_HMAC_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga70f397425684b3efcde1e0e34c28261f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaee84269106a947cb6ac353e15e6c4687"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_HMAC_GET_HASH</b>(hmac_alg)&#160;&#160;&#160;(PSA_ALG_CATEGORY_HASH | ((hmac_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:gaee84269106a947cb6ac353e15e6c4687"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4a050c3c3cbc6eb96418f18847601c8a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga4a050c3c3cbc6eb96418f18847601c8a">PSA_ALG_IS_HMAC</a>(alg)</td></tr>
+<tr class="separator:ga4a050c3c3cbc6eb96418f18847601c8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8c48784065c65c623a21b9a3ccc56b1d"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_MAC_TRUNCATION_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x00003f00)</td></tr>
+<tr class="separator:ga8c48784065c65c623a21b9a3ccc56b1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6db5ce573e6ad52068aba31c3afdce31"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_MAC_TRUNCATION_OFFSET</b>&#160;&#160;&#160;8</td></tr>
+<tr class="separator:ga6db5ce573e6ad52068aba31c3afdce31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf36137110baf7bb13c5028fd62c64276"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaf36137110baf7bb13c5028fd62c64276">PSA_ALG_TRUNCATED_MAC</a>(alg,  mac_length)</td></tr>
+<tr class="separator:gaf36137110baf7bb13c5028fd62c64276"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa05a8d99634f3350597ac9284fb70cb1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa05a8d99634f3350597ac9284fb70cb1">PSA_ALG_FULL_LENGTH_MAC</a>(alg)&#160;&#160;&#160;((alg) &amp; ~PSA_ALG_MAC_TRUNCATION_MASK)</td></tr>
+<tr class="separator:gaa05a8d99634f3350597ac9284fb70cb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab03726c4476174e019a08e2a04018ce8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gab03726c4476174e019a08e2a04018ce8">PSA_MAC_TRUNCATED_LENGTH</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_MAC_TRUNCATION_MASK) &gt;&gt; PSA_MAC_TRUNCATION_OFFSET)</td></tr>
+<tr class="separator:gab03726c4476174e019a08e2a04018ce8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaee0c29980b08305f6d0e7b3fbb588ade"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CIPHER_MAC_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x02c00000)</td></tr>
+<tr class="separator:gaee0c29980b08305f6d0e7b3fbb588ade"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga20bdc755de7b90f6621ccb1e6bb5d9e1"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CBC_MAC</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x02c00001)</td></tr>
+<tr class="separator:ga20bdc755de7b90f6621ccb1e6bb5d9e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga146328a1e0023a02464e232d6ecefdc2"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CMAC</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x02c00002)</td></tr>
+<tr class="separator:ga146328a1e0023a02464e232d6ecefdc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga69a012ce150219a2d97c3ab5582f0004"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_GMAC</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x02c00003)</td></tr>
+<tr class="separator:ga69a012ce150219a2d97c3ab5582f0004"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae49d1eb601125d65a5c5b252aa45479e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gae49d1eb601125d65a5c5b252aa45479e">PSA_ALG_IS_BLOCK_CIPHER_MAC</a>(alg)</td></tr>
+<tr class="separator:gae49d1eb601125d65a5c5b252aa45479e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac79618293c4254143caa75f6c5c82fa1"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CIPHER_STREAM_FLAG</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x00800000)</td></tr>
+<tr class="separator:gac79618293c4254143caa75f6c5c82fa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gabc80d19d140032e3b138db4ed37d0bd7"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CIPHER_FROM_BLOCK_FLAG</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x00400000)</td></tr>
+<tr class="separator:gabc80d19d140032e3b138db4ed37d0bd7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacfec68e0c6175e02e1b2ebc97df383c0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gacfec68e0c6175e02e1b2ebc97df383c0">PSA_ALG_IS_STREAM_CIPHER</a>(alg)</td></tr>
+<tr class="separator:gacfec68e0c6175e02e1b2ebc97df383c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab6a5284decb0e5e1b5b8740a41ef3c5e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gab6a5284decb0e5e1b5b8740a41ef3c5e">PSA_ALG_ARC4</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04800001)</td></tr>
+<tr class="separator:gab6a5284decb0e5e1b5b8740a41ef3c5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad318309706a769cffdc64e4c7e06b2e9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gad318309706a769cffdc64e4c7e06b2e9">PSA_ALG_CTR</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04c00001)</td></tr>
+<tr class="separator:gad318309706a769cffdc64e4c7e06b2e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0088c933e01d671f263a9a1f177cb5bc"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CFB</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04c00002)</td></tr>
+<tr class="separator:ga0088c933e01d671f263a9a1f177cb5bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae96bb421fa634c6fa8f571f0112f1ddb"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_OFB</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04c00003)</td></tr>
+<tr class="separator:gae96bb421fa634c6fa8f571f0112f1ddb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa722c0e426a797fd6d99623f59748125"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa722c0e426a797fd6d99623f59748125">PSA_ALG_XTS</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x044000ff)</td></tr>
+<tr class="separator:gaa722c0e426a797fd6d99623f59748125"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacb332d72716958880ee7f97d8365ae66"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gacb332d72716958880ee7f97d8365ae66">PSA_ALG_CBC_NO_PADDING</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04600100)</td></tr>
+<tr class="separator:gacb332d72716958880ee7f97d8365ae66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaef50d2e9716eb6d476046608e4e0c78c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaef50d2e9716eb6d476046608e4e0c78c">PSA_ALG_CBC_PKCS7</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04600101)</td></tr>
+<tr class="separator:gaef50d2e9716eb6d476046608e4e0c78c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac2c0e7d21f1b2df5e76bcb4a8f84273c"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CCM</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x06001001)</td></tr>
+<tr class="separator:gac2c0e7d21f1b2df5e76bcb4a8f84273c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0d7d02b15aaae490d38277d99f1c637c"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_GCM</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x06001002)</td></tr>
+<tr class="separator:ga0d7d02b15aaae490d38277d99f1c637c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga575d9082463a06a86c2a22dd63c2e772"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_AEAD_TAG_LENGTH_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x00003f00)</td></tr>
+<tr class="separator:ga575d9082463a06a86c2a22dd63c2e772"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga987d416146048906d40dd1d9572e3193"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_AEAD_TAG_LENGTH_OFFSET</b>&#160;&#160;&#160;8</td></tr>
+<tr class="separator:ga987d416146048906d40dd1d9572e3193"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa63c520b62ab001d54d28801742fc9db"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa63c520b62ab001d54d28801742fc9db">PSA_ALG_AEAD_WITH_TAG_LENGTH</a>(alg,  tag_length)</td></tr>
+<tr class="separator:gaa63c520b62ab001d54d28801742fc9db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaddea507e062250cda8a29407a9480d2b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaddea507e062250cda8a29407a9480d2b">PSA_ALG_AEAD_WITH_DEFAULT_TAG_LENGTH</a>(alg)</td></tr>
+<tr class="separator:gaddea507e062250cda8a29407a9480d2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6e52012ca3be6acb4c756c372f18c3eb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE</b>(alg,  ref)</td></tr>
+<tr class="separator:ga6e52012ca3be6acb4c756c372f18c3eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga819b23c9899e92e9f867c7b2ae8f264c"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_RSA_PKCS1V15_SIGN_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10020000)</td></tr>
+<tr class="separator:ga819b23c9899e92e9f867c7b2ae8f264c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga702ff75385a6ae7d4247033f479439af"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga702ff75385a6ae7d4247033f479439af">PSA_ALG_RSA_PKCS1V15_SIGN</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_RSA_PKCS1V15_SIGN_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga702ff75385a6ae7d4247033f479439af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4215e2a78dcf834e9a625927faa2a817"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga4215e2a78dcf834e9a625927faa2a817">PSA_ALG_RSA_PKCS1V15_SIGN_RAW</a>&#160;&#160;&#160;PSA_ALG_RSA_PKCS1V15_SIGN_BASE</td></tr>
+<tr class="separator:ga4215e2a78dcf834e9a625927faa2a817"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9d545279f23d43b1b2a744d0dd6826d0"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_RSA_PKCS1V15_SIGN</b>(alg)&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PKCS1V15_SIGN_BASE)</td></tr>
+<tr class="separator:ga9d545279f23d43b1b2a744d0dd6826d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga49d39a343790971b7a74644f4faea0c0"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_RSA_PSS_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10030000)</td></tr>
+<tr class="separator:ga49d39a343790971b7a74644f4faea0c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga62152bf4cb4bf6aace5e1be8f143564d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga62152bf4cb4bf6aace5e1be8f143564d">PSA_ALG_RSA_PSS</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_RSA_PSS_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga62152bf4cb4bf6aace5e1be8f143564d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafa04fae7393a76d5161558768cb82a78"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_RSA_PSS</b>(alg)&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PSS_BASE)</td></tr>
+<tr class="separator:gafa04fae7393a76d5161558768cb82a78"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga863284106894476e3a8524805410b55b"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_DSA_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10040000)</td></tr>
+<tr class="separator:ga863284106894476e3a8524805410b55b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9a68efdddff5ae95f104a1416b12742e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga9a68efdddff5ae95f104a1416b12742e">PSA_ALG_DSA</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_DSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga9a68efdddff5ae95f104a1416b12742e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad3800dafc62d6a17bcae4bce98402e68"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_DETERMINISTIC_DSA_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10050000)</td></tr>
+<tr class="separator:gad3800dafc62d6a17bcae4bce98402e68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1d2a96f788cce4f8fc156d13342e70de"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_DSA_DETERMINISTIC_FLAG</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x00010000)</td></tr>
+<tr class="separator:ga1d2a96f788cce4f8fc156d13342e70de"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab8eb98fb6d2e094e47f3b44dfe128f94"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_DETERMINISTIC_DSA</b>(hash_alg)&#160;&#160;&#160;(PSA_ALG_DETERMINISTIC_DSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:gab8eb98fb6d2e094e47f3b44dfe128f94"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacfc3cd50ef0c4bf694cf936079bcbaee"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_DSA</b>(alg)</td></tr>
+<tr class="separator:gacfc3cd50ef0c4bf694cf936079bcbaee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae01ae792228c16eac05102f8e900efd1"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_DSA_IS_DETERMINISTIC</b>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_DSA_DETERMINISTIC_FLAG) != 0)</td></tr>
+<tr class="separator:gae01ae792228c16eac05102f8e900efd1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga11f7d6fe7a4441143ed398420b7d1980"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_DETERMINISTIC_DSA</b>(alg)&#160;&#160;&#160;(PSA_ALG_IS_DSA(alg) &amp;&amp; PSA_ALG_DSA_IS_DETERMINISTIC(alg))</td></tr>
+<tr class="separator:ga11f7d6fe7a4441143ed398420b7d1980"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga474c0582c4726d0c0274e470f4199cf9"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_RANDOMIZED_DSA</b>(alg)&#160;&#160;&#160;(PSA_ALG_IS_DSA(alg) &amp;&amp; !PSA_ALG_DSA_IS_DETERMINISTIC(alg))</td></tr>
+<tr class="separator:ga474c0582c4726d0c0274e470f4199cf9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafd9800fdbe6ea881e0ac0ce03d145928"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_ECDSA_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10060000)</td></tr>
+<tr class="separator:gafd9800fdbe6ea881e0ac0ce03d145928"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7e3ce9f514a227d5ba5d8318870452e3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga7e3ce9f514a227d5ba5d8318870452e3">PSA_ALG_ECDSA</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_ECDSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga7e3ce9f514a227d5ba5d8318870452e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga51d6b6044a62e33cae0cf64bfc3b22a4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga51d6b6044a62e33cae0cf64bfc3b22a4">PSA_ALG_ECDSA_ANY</a>&#160;&#160;&#160;PSA_ALG_ECDSA_BASE</td></tr>
+<tr class="separator:ga51d6b6044a62e33cae0cf64bfc3b22a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6c08b65200140aeb46ee9db9c8ed878c"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_DETERMINISTIC_ECDSA_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10070000)</td></tr>
+<tr class="separator:ga6c08b65200140aeb46ee9db9c8ed878c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga11da566bcd341661c8de921e2ca5ed03"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga11da566bcd341661c8de921e2ca5ed03">PSA_ALG_DETERMINISTIC_ECDSA</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_DETERMINISTIC_ECDSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga11da566bcd341661c8de921e2ca5ed03"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafb92dc138c9d2388033ff5fc1dab7b48"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_ECDSA</b>(alg)</td></tr>
+<tr class="separator:gafb92dc138c9d2388033ff5fc1dab7b48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaced29d8e3a1740aaec01e9ef8211df4f"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_ECDSA_IS_DETERMINISTIC</b>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_DSA_DETERMINISTIC_FLAG) != 0)</td></tr>
+<tr class="separator:gaced29d8e3a1740aaec01e9ef8211df4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacd8766fe0fb8c1e2d32644e0d092c43a"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_DETERMINISTIC_ECDSA</b>(alg)&#160;&#160;&#160;(PSA_ALG_IS_ECDSA(alg) &amp;&amp; PSA_ALG_ECDSA_IS_DETERMINISTIC(alg))</td></tr>
+<tr class="separator:gacd8766fe0fb8c1e2d32644e0d092c43a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae7b0fafebd139f6f815285b7cad622ea"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_RANDOMIZED_ECDSA</b>(alg)&#160;&#160;&#160;(PSA_ALG_IS_ECDSA(alg) &amp;&amp; !PSA_ALG_ECDSA_IS_DETERMINISTIC(alg))</td></tr>
+<tr class="separator:gae7b0fafebd139f6f815285b7cad622ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga24cf6d7bcd2b9aeeeff86f07b6c674e3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga24cf6d7bcd2b9aeeeff86f07b6c674e3">PSA_ALG_SIGN_GET_HASH</a>(alg)</td></tr>
+<tr class="separator:ga24cf6d7bcd2b9aeeeff86f07b6c674e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4c540d3abe43fb9abcb94f2bc51acef9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga4c540d3abe43fb9abcb94f2bc51acef9">PSA_ALG_RSA_PKCS1V15_CRYPT</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x12020000)</td></tr>
+<tr class="separator:ga4c540d3abe43fb9abcb94f2bc51acef9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga67ba62fbd154f5d3098866ae68ba66eb"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_RSA_OAEP_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x12030000)</td></tr>
+<tr class="separator:ga67ba62fbd154f5d3098866ae68ba66eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa1235dc3fdd9839c6c1b1a9857344c76"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa1235dc3fdd9839c6c1b1a9857344c76">PSA_ALG_RSA_OAEP</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_RSA_OAEP_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:gaa1235dc3fdd9839c6c1b1a9857344c76"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9a85c05fd5c39ca63bbc47fb0755da39"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_RSA_OAEP</b>(alg)&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_OAEP_BASE)</td></tr>
+<tr class="separator:ga9a85c05fd5c39ca63bbc47fb0755da39"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae6b0b87aabe82a1b3113824f022c52e8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_RSA_OAEP_GET_HASH</b>(alg)</td></tr>
+<tr class="separator:gae6b0b87aabe82a1b3113824f022c52e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga85fe668f95a1e65b573dc5acb798be6f"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_HKDF_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x30000100)</td></tr>
+<tr class="separator:ga85fe668f95a1e65b573dc5acb798be6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga32a888fb360e6e25cab8a343772c4a82"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga32a888fb360e6e25cab8a343772c4a82">PSA_ALG_HKDF</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_HKDF_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga32a888fb360e6e25cab8a343772c4a82"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1979d0a76fcee6164cf2e65960f38db2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga1979d0a76fcee6164cf2e65960f38db2">PSA_ALG_IS_HKDF</a>(alg)&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_HKDF_BASE)</td></tr>
+<tr class="separator:ga1979d0a76fcee6164cf2e65960f38db2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga643df48b529b176995927b697ff07a4c"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_HKDF_GET_HASH</b>(hkdf_alg)&#160;&#160;&#160;(PSA_ALG_CATEGORY_HASH | ((hkdf_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga643df48b529b176995927b697ff07a4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadb328698047e32da8e16551b28b50a35"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_TLS12_PRF_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x30000200)</td></tr>
+<tr class="separator:gadb328698047e32da8e16551b28b50a35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6d5623c2ccda1d4a84e34351af8382d5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga6d5623c2ccda1d4a84e34351af8382d5">PSA_ALG_TLS12_PRF</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_TLS12_PRF_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga6d5623c2ccda1d4a84e34351af8382d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa3c18890c50222e5219f40ade8927e66"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa3c18890c50222e5219f40ade8927e66">PSA_ALG_IS_TLS12_PRF</a>(alg)&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_TLS12_PRF_BASE)</td></tr>
+<tr class="separator:gaa3c18890c50222e5219f40ade8927e66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga403b2695655c7e03d6c07c061c606ab7"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_TLS12_PRF_GET_HASH</b>(hkdf_alg)&#160;&#160;&#160;(PSA_ALG_CATEGORY_HASH | ((hkdf_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga403b2695655c7e03d6c07c061c606ab7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaaca4b1953a3f31f1a285a48454aa4a6f"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_TLS12_PSK_TO_MS_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x30000300)</td></tr>
+<tr class="separator:gaaca4b1953a3f31f1a285a48454aa4a6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga039ec797f15d1635d9b2e09a611f8a68"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga039ec797f15d1635d9b2e09a611f8a68">PSA_ALG_TLS12_PSK_TO_MS</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_TLS12_PSK_TO_MS_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga039ec797f15d1635d9b2e09a611f8a68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab25ecc074a93fd11069bedfbba5a287b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gab25ecc074a93fd11069bedfbba5a287b">PSA_ALG_IS_TLS12_PSK_TO_MS</a>(alg)&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_TLS12_PSK_TO_MS_BASE)</td></tr>
+<tr class="separator:gab25ecc074a93fd11069bedfbba5a287b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga49f873d8cf9fb0042118e626330eec9d"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_TLS12_PSK_TO_MS_GET_HASH</b>(hkdf_alg)&#160;&#160;&#160;(PSA_ALG_CATEGORY_HASH | ((hkdf_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga49f873d8cf9fb0042118e626330eec9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga914b52f4be62633b3350c5e03bf32ecb"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_KEY_DERIVATION_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x010fffff)</td></tr>
+<tr class="separator:ga914b52f4be62633b3350c5e03bf32ecb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacbbcb60abf1714722f50f80ce9c21602"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gacbbcb60abf1714722f50f80ce9c21602">PSA_ALG_SELECT_RAW</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x31000001)</td></tr>
+<tr class="separator:gacbbcb60abf1714722f50f80ce9c21602"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga56c1189add62b59e8e6a28a809b57037"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_KEY_AGREEMENT_GET_KDF</b>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_KEY_DERIVATION_MASK) | PSA_ALG_CATEGORY_KEY_DERIVATION)</td></tr>
+<tr class="separator:ga56c1189add62b59e8e6a28a809b57037"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf837c55ba698b488b6e63300e3470abf"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_KEY_AGREEMENT_GET_BASE</b>(alg)&#160;&#160;&#160;((alg) &amp; ~PSA_ALG_KEY_DERIVATION_MASK)</td></tr>
+<tr class="separator:gaf837c55ba698b488b6e63300e3470abf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf5e91b071f657a662ce546d4989e0067"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_FFDH_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x22100000)</td></tr>
+<tr class="separator:gaf5e91b071f657a662ce546d4989e0067"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga21037568ad0b2e97d76dfc700b6b4483"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga21037568ad0b2e97d76dfc700b6b4483">PSA_ALG_FFDH</a>(kdf_alg)&#160;&#160;&#160;(PSA_ALG_FFDH_BASE | ((kdf_alg) &amp; PSA_ALG_KEY_DERIVATION_MASK))</td></tr>
+<tr class="separator:ga21037568ad0b2e97d76dfc700b6b4483"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa3cf76164cd9375af4fb8a291078a19e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa3cf76164cd9375af4fb8a291078a19e">PSA_ALG_IS_FFDH</a>(alg)&#160;&#160;&#160;(PSA_ALG_KEY_AGREEMENT_GET_BASE(alg) == PSA_ALG_FFDH_BASE)</td></tr>
+<tr class="separator:gaa3cf76164cd9375af4fb8a291078a19e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga856863cdf3b7881d7dcb2b0f8a72b5c8"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_ECDH_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x22200000)</td></tr>
+<tr class="separator:ga856863cdf3b7881d7dcb2b0f8a72b5c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga974b73fccc5a9142256d8ce3092dff7f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga974b73fccc5a9142256d8ce3092dff7f">PSA_ALG_ECDH</a>(kdf_alg)&#160;&#160;&#160;(PSA_ALG_ECDH_BASE | ((kdf_alg) &amp; PSA_ALG_KEY_DERIVATION_MASK))</td></tr>
+<tr class="separator:ga974b73fccc5a9142256d8ce3092dff7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9d9b6533d2a6bea7bac7ae01facb820d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga9d9b6533d2a6bea7bac7ae01facb820d">PSA_ALG_IS_ECDH</a>(alg)&#160;&#160;&#160;(PSA_ALG_KEY_AGREEMENT_GET_BASE(alg) == PSA_ALG_ECDH_BASE)</td></tr>
+<tr class="separator:ga9d9b6533d2a6bea7bac7ae01facb820d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8b438870ba69489b685730d346455108"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__lifetimes.html#ga8b438870ba69489b685730d346455108">PSA_KEY_LIFETIME_VOLATILE</a>&#160;&#160;&#160;((<a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a>)0x00000000)</td></tr>
+<tr class="separator:ga8b438870ba69489b685730d346455108"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3713a01c5fcd5f7eae46ff22ceaf6d02"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__lifetimes.html#ga3713a01c5fcd5f7eae46ff22ceaf6d02">PSA_KEY_LIFETIME_PERSISTENT</a>&#160;&#160;&#160;((<a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a>)0x00000001)</td></tr>
+<tr class="separator:ga3713a01c5fcd5f7eae46ff22ceaf6d02"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7dddccdd1303176e87a4d20c87b589ed"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga7dddccdd1303176e87a4d20c87b589ed">PSA_KEY_USAGE_EXPORT</a>&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000001)</td></tr>
+<tr class="separator:ga7dddccdd1303176e87a4d20c87b589ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga75153b296d045d529d97203a6a995dad"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga75153b296d045d529d97203a6a995dad">PSA_KEY_USAGE_ENCRYPT</a>&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000100)</td></tr>
+<tr class="separator:ga75153b296d045d529d97203a6a995dad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac3f2d2e5983db1edde9f142ca9bf8e6a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#gac3f2d2e5983db1edde9f142ca9bf8e6a">PSA_KEY_USAGE_DECRYPT</a>&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000200)</td></tr>
+<tr class="separator:gac3f2d2e5983db1edde9f142ca9bf8e6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga99b9f456cf59efc4b5579465407aef5a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga99b9f456cf59efc4b5579465407aef5a">PSA_KEY_USAGE_SIGN</a>&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000400)</td></tr>
+<tr class="separator:ga99b9f456cf59efc4b5579465407aef5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga39b54ffd5958b69634607924fa53cea6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga39b54ffd5958b69634607924fa53cea6">PSA_KEY_USAGE_VERIFY</a>&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000800)</td></tr>
+<tr class="separator:ga39b54ffd5958b69634607924fa53cea6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf19022acc5ef23cf12477f632b48a0b2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#gaf19022acc5ef23cf12477f632b48a0b2">PSA_KEY_USAGE_DERIVE</a>&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00001000)</td></tr>
+<tr class="separator:gaf19022acc5ef23cf12477f632b48a0b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga05676e70ba5c6a7565aff3c36677c1f9"><td class="memItemLeft" align="right" valign="top">typedef int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a></td></tr>
+<tr class="memdesc:ga05676e70ba5c6a7565aff3c36677c1f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function return status.  <a href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">More...</a><br /></td></tr>
+<tr class="separator:ga05676e70ba5c6a7565aff3c36677c1f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga578159487dfc7096cb191b0d2befe628"><td class="memItemLeft" align="right" valign="top">
+typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a></td></tr>
+<tr class="memdesc:ga578159487dfc7096cb191b0d2befe628"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encoding of a key type. <br /></td></tr>
+<tr class="separator:ga578159487dfc7096cb191b0d2befe628"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4e8977c145cce5077c4bce7fec890ad9"><td class="memItemLeft" align="right" valign="top">typedef uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a></td></tr>
+<tr class="separator:ga4e8977c145cce5077c4bce7fec890ad9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac2e4d47f1300d73c2f829a6d99252d69"><td class="memItemLeft" align="right" valign="top">typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a></td></tr>
+<tr class="memdesc:gac2e4d47f1300d73c2f829a6d99252d69"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encoding of a cryptographic algorithm.  <a href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">More...</a><br /></td></tr>
+<tr class="separator:gac2e4d47f1300d73c2f829a6d99252d69"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6821ff6dd39dc2bc370ded760ad8b0cf"><td class="memItemLeft" align="right" valign="top">typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a></td></tr>
+<tr class="separator:ga6821ff6dd39dc2bc370ded760ad8b0cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga11e986351c65bd3dc3c0fe2cd9926e4b"><td class="memItemLeft" align="right" valign="top">typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">psa_key_id_t</a></td></tr>
+<tr class="separator:ga11e986351c65bd3dc3c0fe2cd9926e4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7bb9de71337e0e98de843aa7f9b55f25"><td class="memItemLeft" align="right" valign="top">
+typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a></td></tr>
+<tr class="memdesc:ga7bb9de71337e0e98de843aa7f9b55f25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encoding of permitted usage on a key. <br /></td></tr>
+<tr class="separator:ga7bb9de71337e0e98de843aa7f9b55f25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>PSA cryptography module: Integer encodings. </p>
+<dl class="section note"><dt>Note</dt><dd>This file may not be included directly. Applications must include <a class="el" href="crypto_8h.html" title="Platform Security Architecture cryptography module. ">psa/crypto.h</a>. Drivers must include the appropriate driver header file.</dd></dl>
+<p>This file contains portable definitions of integral types and macros to build and analyze values of these types. The types concerned are properties of cryptographic keys, designations of cryptographic algorithms, and error codes returned by the library.</p>
+<p>This header file does not declare any function. </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/crypto__enum_8h__dep__incl.map b/docs/html/crypto__enum_8h__dep__incl.map
new file mode 100644
index 0000000..805e410
--- /dev/null
+++ b/docs/html/crypto__enum_8h__dep__incl.map
@@ -0,0 +1,3 @@
+<map id="psa/crypto_enum.h" name="psa/crypto_enum.h">
+<area shape="rect" id="node2" href="$crypto_8h.html" title="Platform Security Architecture cryptography module. " alt="" coords="25,80,119,107"/>
+</map>
diff --git a/docs/html/crypto__enum_8h__dep__incl.md5 b/docs/html/crypto__enum_8h__dep__incl.md5
new file mode 100644
index 0000000..21c7ef7
--- /dev/null
+++ b/docs/html/crypto__enum_8h__dep__incl.md5
@@ -0,0 +1 @@
+13274746bc95b43464bdf033bcf1ced6
\ No newline at end of file
diff --git a/docs/html/crypto__enum_8h__dep__incl.png b/docs/html/crypto__enum_8h__dep__incl.png
new file mode 100644
index 0000000..ac4a5c5
--- /dev/null
+++ b/docs/html/crypto__enum_8h__dep__incl.png
Binary files differ
diff --git a/docs/html/crypto__enum_8h__incl.map b/docs/html/crypto__enum_8h__incl.map
new file mode 100644
index 0000000..ee3647e
--- /dev/null
+++ b/docs/html/crypto__enum_8h__incl.map
@@ -0,0 +1,2 @@
+<map id="psa/crypto_enum.h" name="psa/crypto_enum.h">
+</map>
diff --git a/docs/html/crypto__enum_8h__incl.md5 b/docs/html/crypto__enum_8h__incl.md5
new file mode 100644
index 0000000..cc108ec
--- /dev/null
+++ b/docs/html/crypto__enum_8h__incl.md5
@@ -0,0 +1 @@
+a4850a23fc9b42677d19279e04a16c71
\ No newline at end of file
diff --git a/docs/html/crypto__enum_8h__incl.png b/docs/html/crypto__enum_8h__incl.png
new file mode 100644
index 0000000..dd745f9
--- /dev/null
+++ b/docs/html/crypto__enum_8h__incl.png
Binary files differ
diff --git a/docs/html/crypto__enum_8h_source.html b/docs/html/crypto__enum_8h_source.html
new file mode 100644
index 0000000..2a7b432
--- /dev/null
+++ b/docs/html/crypto__enum_8h_source.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: psa/crypto_enum.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">Working draft</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_7dae9cfde651cd3cb034485ce5e391b9.html">psa</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">crypto_enum.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="crypto__enum_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> *  Copyright (C) 2018, ARM Limited, All Rights Reserved</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> *  SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> *  Licensed under the Apache License, Version 2.0 (the &quot;License&quot;); you may</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> *  not use this file except in compliance with the License.</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> *  You may obtain a copy of the License at</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> *  http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> *  Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment"> *  distributed under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"> *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment"> *  See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment"> *  limitations under the License.</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment"> *  This file is part of mbed TLS (https://tls.mbed.org)</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor">#ifndef PSA_CRYPTO_ENUM_H</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="preprocessor">#define PSA_CRYPTO_ENUM_H</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="preprocessor">#include &lt;stdint.h&gt;</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">#if defined(PSA_SUCCESS)</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment">/* If PSA_SUCCESS is defined, assume that PSA crypto is being used</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment"> * together with PSA IPC, which also defines the identifier</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="comment"> * PSA_SUCCESS. We must not define PSA_SUCCESS ourselves in that case;</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment"> * the other error code names don&#39;t clash. Also define psa_status_t as</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="comment"> * an alias for the type used by PSA IPC. This is a temporary hack</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="comment"> * until we unify error reporting in PSA IPC and PSA crypto.</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="comment"> * Note that psa_defs.h must be included before this header!</span></div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="keyword">typedef</span> psa_error_t <a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* defined(PSA_SUCCESS) */</span><span class="preprocessor"></span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">   66</a></span>&#160;<span class="keyword">typedef</span> int32_t <a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">   69</a></span>&#160;<span class="preprocessor">#define PSA_SUCCESS ((psa_status_t)0)</span></div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* !defined(PSA_SUCCESS) */</span><span class="preprocessor"></span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="group__error.html#ga24d5fdcdd759f846f79d9e581c63a83f">   78</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_UNKNOWN_ERROR         ((psa_status_t)1)</span></div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">   87</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_NOT_SUPPORTED         ((psa_status_t)2)</span></div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">  100</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_NOT_PERMITTED         ((psa_status_t)3)</span></div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">  112</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_BUFFER_TOO_SMALL      ((psa_status_t)4)</span></div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="group__error.html#gac2fee3a51249fbea45360aaa911f3e58">  120</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_OCCUPIED_SLOT         ((psa_status_t)5)</span></div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">  128</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_EMPTY_SLOT            ((psa_status_t)6)</span></div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">  140</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_BAD_STATE             ((psa_status_t)7)</span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">  156</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_INVALID_ARGUMENT      ((psa_status_t)8)</span></div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">  162</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_INSUFFICIENT_MEMORY   ((psa_status_t)9)</span></div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="group__error.html#ga897a45eb206a6f6b7be7ffbe36f0d766">  171</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_INSUFFICIENT_STORAGE  ((psa_status_t)10)</span></div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;</div><div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">  188</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_COMMUNICATION_FAILURE ((psa_status_t)11)</span></div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="group__error.html#gadd169a1af2707862b95fb9df91dfc37d">  213</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_STORAGE_FAILURE       ((psa_status_t)12)</span></div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;</div><div class="line"><a name="l00219"></a><span class="lineno"><a class="line" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">  219</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_HARDWARE_FAILURE      ((psa_status_t)13)</span></div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">  250</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_TAMPERING_DETECTED    ((psa_status_t)14)</span></div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="group__error.html#ga4deb59fec02297ec5d8b42178323f675">  269</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_INSUFFICIENT_ENTROPY  ((psa_status_t)15)</span></div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="group__error.html#ga35927f755d232c4766de600f2c49e9f2">  279</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_INVALID_SIGNATURE     ((psa_status_t)16)</span></div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="group__error.html#gabe29594edbfb152cf153975b0597ac48">  295</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_INVALID_PADDING       ((psa_status_t)17)</span></div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="group__error.html#gaf1fa61f72e9e5b4a848c991bea495767">  301</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_INSUFFICIENT_CAPACITY ((psa_status_t)18)</span></div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;</div><div class="line"><a name="l00305"></a><span class="lineno"><a class="line" href="group__error.html#gadf22718935657c2c3168c228204085f9">  305</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_INVALID_HANDLE        ((psa_status_t)19)</span></div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">  315</a></span>&#160;<span class="keyword">typedef</span> uint32_t <a class="code" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>;</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gafce7ab2b54ce97ea5bff73f13a9f3e5b">  321</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_NONE                       ((psa_key_type_t)0x00000000)</span></div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga8dbaed2fdb1ebae8aa127ad3988516f7">  330</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_VENDOR_FLAG                ((psa_key_type_t)0x80000000)</span></div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_CATEGORY_MASK              ((psa_key_type_t)0x70000000)</span></div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_CATEGORY_SYMMETRIC         ((psa_key_type_t)0x40000000)</span></div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_CATEGORY_RAW               ((psa_key_type_t)0x50000000)</span></div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY        ((psa_key_type_t)0x60000000)</span></div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_CATEGORY_KEY_PAIR          ((psa_key_type_t)0x70000000)</span></div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_CATEGORY_FLAG_PAIR         ((psa_key_type_t)0x10000000)</span></div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;</div><div class="line"><a name="l00341"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gadbe4c086a6562aefe344bc79e51bdfd3">  341</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_VENDOR_DEFINED(type) \</span></div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;<span class="preprocessor">    (((type) &amp; PSA_KEY_TYPE_VENDOR_FLAG) != 0)</span></div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaef86ce4e810e1c2c76068ac874bfef54">  348</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_UNSTRUCTURED(type) \</span></div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;<span class="preprocessor">    (((type) &amp; PSA_KEY_TYPE_CATEGORY_MASK &amp; ~(psa_key_type_t)0x10000000) == \</span></div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;<span class="preprocessor">     PSA_KEY_TYPE_CATEGORY_SYMMETRIC)</span></div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;</div><div class="line"><a name="l00353"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gab138ae2ebf2905dfbaf4154db2620939">  353</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_ASYMMETRIC(type)                                \</span></div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;<span class="preprocessor">    (((type) &amp; PSA_KEY_TYPE_CATEGORY_MASK                               \</span></div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;<span class="preprocessor">      &amp; ~PSA_KEY_TYPE_CATEGORY_FLAG_PAIR) ==                            \</span></div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;<span class="preprocessor">     PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY)</span></div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;</div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gac674a0f059bc0cb72b47f0c517b4f45b">  358</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_PUBLIC_KEY(type)                                \</span></div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;<span class="preprocessor">    (((type) &amp; PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY)</span></div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;</div><div class="line"><a name="l00362"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gac14c6d6e1b2b7f4a92a7b757465cff29">  362</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_KEYPAIR(type)                                   \</span></div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;<span class="preprocessor">    (((type) &amp; PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_KEY_PAIR)</span></div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;</div><div class="line"><a name="l00374"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaf09f1ca1de6a7e7cff0fe516f3f6c91d">  374</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_KEYPAIR_OF_PUBLIC_KEY(type)        \</span></div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;<span class="preprocessor">    ((type) | PSA_KEY_TYPE_CATEGORY_FLAG_PAIR)</span></div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;</div><div class="line"><a name="l00386"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">  386</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR(type)        \</span></div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;<span class="preprocessor">    ((type) &amp; ~PSA_KEY_TYPE_CATEGORY_FLAG_PAIR)</span></div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaa97f92025533102616b32d571c940d80">  393</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_RAW_DATA                   ((psa_key_type_t)0x50000001)</span></div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;</div><div class="line"><a name="l00403"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga92d989f4ca64abd00f463defd773a6f8">  403</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_HMAC                       ((psa_key_type_t)0x51000000)</span></div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;</div><div class="line"><a name="l00410"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gae871b2357b8593f33bfd51abbf93ebb1">  410</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_DERIVE                     ((psa_key_type_t)0x52000000)</span></div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;</div><div class="line"><a name="l00417"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga6ee54579dcf278c677eda4bb1a29575e">  417</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_AES                        ((psa_key_type_t)0x40000001)</span></div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;</div><div class="line"><a name="l00428"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga577562bfbbc691c820d55ec308333138">  428</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_DES                        ((psa_key_type_t)0x40000002)</span></div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;</div><div class="line"><a name="l00432"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gad8e5da742343fd5519f9d8a630c2ed81">  432</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_CAMELLIA                   ((psa_key_type_t)0x40000003)</span></div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;</div><div class="line"><a name="l00438"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gae4d46e83f910dcaa126000a8ed03cde9">  438</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_ARC4                       ((psa_key_type_t)0x40000004)</span></div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;</div><div class="line"><a name="l00441"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga9ba0878f56c8bcd1995ac017a74f513b">  441</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_RSA_PUBLIC_KEY             ((psa_key_type_t)0x60010000)</span></div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;</div><div class="line"><a name="l00443"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga581f50687f5d650456925278948f2799">  443</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_RSA_KEYPAIR                ((psa_key_type_t)0x70010000)</span></div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;</div><div class="line"><a name="l00445"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga0e1d8f241228e49c9cadadfb4579ef1a">  445</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_RSA(type)                                       \</span></div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;<span class="preprocessor">    (PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR(type) == PSA_KEY_TYPE_RSA_PUBLIC_KEY)</span></div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;</div><div class="line"><a name="l00449"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga5e7439c2905136366c3a876e62e5ddfc">  449</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_DSA_PUBLIC_KEY             ((psa_key_type_t)0x60020000)</span></div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;</div><div class="line"><a name="l00451"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga011010ee28c20388f3d89fb27088ed62">  451</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_DSA_KEYPAIR                ((psa_key_type_t)0x70020000)</span></div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;</div><div class="line"><a name="l00453"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga273fdfcf23eb0624f8b63d2321cf95c1">  453</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_DSA(type)                                       \</span></div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;<span class="preprocessor">    (PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR(type) == PSA_KEY_TYPE_DSA_PUBLIC_KEY)</span></div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE        ((psa_key_type_t)0x60030000)</span></div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_ECC_KEYPAIR_BASE           ((psa_key_type_t)0x70030000)</span></div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_ECC_CURVE_MASK             ((psa_key_type_t)0x0000ffff)</span></div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;</div><div class="line"><a name="l00460"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gadf3ad65d157bf5282849c954bf3f51af">  460</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_ECC_KEYPAIR(curve)         \</span></div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;<span class="preprocessor">    (PSA_KEY_TYPE_ECC_KEYPAIR_BASE | (curve))</span></div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;</div><div class="line"><a name="l00463"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gad54c03d3b47020e571a72cd01d978cf2">  463</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_ECC_PUBLIC_KEY(curve)              \</span></div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;<span class="preprocessor">    (PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE | (curve))</span></div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;</div><div class="line"><a name="l00467"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga88e01fa06b585654689a99bcc06bbe66">  467</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_ECC(type)                                       \</span></div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;<span class="preprocessor">    ((PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR(type) &amp;                        \</span></div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;<span class="preprocessor">      ~PSA_KEY_TYPE_ECC_CURVE_MASK) == PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE)</span></div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;</div><div class="line"><a name="l00471"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga7bf101b671e8cf26f4cb08fcb679db4b">  471</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_ECC_KEYPAIR(type)                               \</span></div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;<span class="preprocessor">    (((type) &amp; ~PSA_KEY_TYPE_ECC_CURVE_MASK) ==                         \</span></div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;<span class="preprocessor">     PSA_KEY_TYPE_ECC_KEYPAIR_BASE)</span></div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;</div><div class="line"><a name="l00475"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga5af146a173b0c84d7e737e2fb6a3c0a7">  475</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY(type)                            \</span></div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;<span class="preprocessor">    (((type) &amp; ~PSA_KEY_TYPE_ECC_CURVE_MASK) ==                         \</span></div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;<span class="preprocessor">     PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE)</span></div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">  480</a></span>&#160;<span class="keyword">typedef</span> uint16_t <a class="code" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>;</div><div class="line"><a name="l00482"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga0c567210e6f80aa8f2aa87efa7a3a3f9">  482</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_GET_CURVE(type)                             \</span></div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;<span class="preprocessor">    ((psa_ecc_curve_t) (PSA_KEY_TYPE_IS_ECC(type) ?              \</span></div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;<span class="preprocessor">                        ((type) &amp; PSA_KEY_TYPE_ECC_CURVE_MASK) : \</span></div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;<span class="preprocessor">                        0))</span></div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;<span class="comment">/* The encoding of curve identifiers is currently aligned with the</span></div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;<span class="comment"> * TLS Supported Groups Registry (formerly known as the</span></div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;<span class="comment"> * TLS EC Named Curve Registry)</span></div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;<span class="comment"> * https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-8</span></div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;<span class="comment"> * The values are defined by RFC 8422 and RFC 7027. */</span></div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT163K1         ((psa_ecc_curve_t) 0x0001)</span></div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT163R1         ((psa_ecc_curve_t) 0x0002)</span></div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT163R2         ((psa_ecc_curve_t) 0x0003)</span></div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT193R1         ((psa_ecc_curve_t) 0x0004)</span></div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT193R2         ((psa_ecc_curve_t) 0x0005)</span></div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT233K1         ((psa_ecc_curve_t) 0x0006)</span></div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT233R1         ((psa_ecc_curve_t) 0x0007)</span></div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT239K1         ((psa_ecc_curve_t) 0x0008)</span></div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT283K1         ((psa_ecc_curve_t) 0x0009)</span></div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT283R1         ((psa_ecc_curve_t) 0x000a)</span></div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT409K1         ((psa_ecc_curve_t) 0x000b)</span></div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT409R1         ((psa_ecc_curve_t) 0x000c)</span></div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT571K1         ((psa_ecc_curve_t) 0x000d)</span></div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT571R1         ((psa_ecc_curve_t) 0x000e)</span></div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP160K1         ((psa_ecc_curve_t) 0x000f)</span></div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP160R1         ((psa_ecc_curve_t) 0x0010)</span></div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP160R2         ((psa_ecc_curve_t) 0x0011)</span></div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP192K1         ((psa_ecc_curve_t) 0x0012)</span></div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP192R1         ((psa_ecc_curve_t) 0x0013)</span></div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP224K1         ((psa_ecc_curve_t) 0x0014)</span></div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP224R1         ((psa_ecc_curve_t) 0x0015)</span></div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP256K1         ((psa_ecc_curve_t) 0x0016)</span></div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP256R1         ((psa_ecc_curve_t) 0x0017)</span></div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP384R1         ((psa_ecc_curve_t) 0x0018)</span></div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP521R1         ((psa_ecc_curve_t) 0x0019)</span></div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_BRAINPOOL_P256R1  ((psa_ecc_curve_t) 0x001a)</span></div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_BRAINPOOL_P384R1  ((psa_ecc_curve_t) 0x001b)</span></div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_BRAINPOOL_P512R1  ((psa_ecc_curve_t) 0x001c)</span></div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_CURVE25519        ((psa_ecc_curve_t) 0x001d)</span></div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_CURVE448          ((psa_ecc_curve_t) 0x001e)</span></div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;</div><div class="line"><a name="l00541"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gacaa366bdeb0413e63e87a667c5457b2e">  541</a></span>&#160;<span class="preprocessor">#define PSA_BLOCK_CIPHER_BLOCK_SIZE(type)            \</span></div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;<span class="preprocessor">    (                                                \</span></div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;<span class="preprocessor">        (type) == PSA_KEY_TYPE_AES ? 16 :            \</span></div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;<span class="preprocessor">        (type) == PSA_KEY_TYPE_DES ? 8 :             \</span></div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;<span class="preprocessor">        (type) == PSA_KEY_TYPE_CAMELLIA ? 16 :       \</span></div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;<span class="preprocessor">        (type) == PSA_KEY_TYPE_ARC4 ? 1 :            \</span></div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;<span class="preprocessor">        0)</span></div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;</div><div class="line"><a name="l00557"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">  557</a></span>&#160;<span class="keyword">typedef</span> uint32_t <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>;</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;<span class="preprocessor">#define PSA_ALG_VENDOR_FLAG                     ((psa_algorithm_t)0x80000000)</span></div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_MASK                   ((psa_algorithm_t)0x7f000000)</span></div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_HASH                   ((psa_algorithm_t)0x01000000)</span></div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_MAC                    ((psa_algorithm_t)0x02000000)</span></div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_CIPHER                 ((psa_algorithm_t)0x04000000)</span></div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_AEAD                   ((psa_algorithm_t)0x06000000)</span></div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_SIGN                   ((psa_algorithm_t)0x10000000)</span></div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION  ((psa_algorithm_t)0x12000000)</span></div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_KEY_AGREEMENT          ((psa_algorithm_t)0x22000000)</span></div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_KEY_DERIVATION         ((psa_algorithm_t)0x30000000)</span></div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_KEY_SELECTION          ((psa_algorithm_t)0x31000000)</span></div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_VENDOR_DEFINED(alg)                                  \</span></div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_VENDOR_FLAG) != 0)</span></div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;</div><div class="line"><a name="l00582"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">  582</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_HASH(alg)                                            \</span></div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_HASH)</span></div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;</div><div class="line"><a name="l00593"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaca7aee4c9dde316b3b1a150a26eab776">  593</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_MAC(alg)                                             \</span></div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_MAC)</span></div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;</div><div class="line"><a name="l00604"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga1d1a5a402ad89a2e68f12bfb535490eb">  604</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_CIPHER(alg)                                          \</span></div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_CIPHER)</span></div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;</div><div class="line"><a name="l00616"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">  616</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_AEAD(alg)                                            \</span></div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_AEAD)</span></div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;</div><div class="line"><a name="l00627"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga6d490d0904e0698f6c1268a89d72ff31">  627</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_SIGN(alg)                                            \</span></div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_SIGN)</span></div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;</div><div class="line"><a name="l00638"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga41d2ee937d54efd76bd54a97b2ebc08a">  638</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_ASYMMETRIC_ENCRYPTION(alg)                           \</span></div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION)</span></div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;<span class="preprocessor">#define PSA_ALG_KEY_SELECTION_FLAG              ((psa_algorithm_t)0x01000000)</span></div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;</div><div class="line"><a name="l00650"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga59753742cb06553bd22751bbef472b6f">  650</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_KEY_AGREEMENT(alg)                                   \</span></div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_CATEGORY_MASK &amp; ~PSA_ALG_KEY_SELECTION_FLAG) ==   \</span></div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;<span class="preprocessor">     PSA_ALG_CATEGORY_KEY_AGREEMENT)</span></div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;</div><div class="line"><a name="l00662"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaf8b90c648aa53dbd06c236695e300cd0">  662</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_KEY_DERIVATION(alg)                                  \</span></div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_KEY_DERIVATION)</span></div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;</div><div class="line"><a name="l00673"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga51b1834ee5e98c6a83c2cfc7699f9077">  673</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_KEY_SELECTION(alg)                                   \</span></div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_KEY_SELECTION)</span></div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;<span class="preprocessor">#define PSA_ALG_HASH_MASK                       ((psa_algorithm_t)0x000000ff)</span></div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;<span class="preprocessor">#define PSA_ALG_MD2                             ((psa_algorithm_t)0x01000001)</span></div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;<span class="preprocessor">#define PSA_ALG_MD4                             ((psa_algorithm_t)0x01000002)</span></div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;<span class="preprocessor">#define PSA_ALG_MD5                             ((psa_algorithm_t)0x01000003)</span></div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;<span class="preprocessor">#define PSA_ALG_RIPEMD160                       ((psa_algorithm_t)0x01000004)</span></div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;<span class="preprocessor">#define PSA_ALG_SHA_1                           ((psa_algorithm_t)0x01000005)</span></div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;</div><div class="line"><a name="l00683"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga25d6a3244d10a7148fe6b026d1979f7b">  683</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA_224                         ((psa_algorithm_t)0x01000008)</span></div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;</div><div class="line"><a name="l00685"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga619471f978e13cdd0a1e37145e4bf341">  685</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA_256                         ((psa_algorithm_t)0x01000009)</span></div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;</div><div class="line"><a name="l00687"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga58af64dd9a86a287e8da9ed7739eead4">  687</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA_384                         ((psa_algorithm_t)0x0100000a)</span></div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;</div><div class="line"><a name="l00689"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gafba3ae409f46d3dd7f37a0910660c3e9">  689</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA_512                         ((psa_algorithm_t)0x0100000b)</span></div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;</div><div class="line"><a name="l00691"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga3fe2d7c3c80e3186ca78d16a35d5d931">  691</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA_512_224                     ((psa_algorithm_t)0x0100000c)</span></div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;</div><div class="line"><a name="l00693"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga5910b3964c14e9613e8643a45b09c2d4">  693</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA_512_256                     ((psa_algorithm_t)0x0100000d)</span></div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;</div><div class="line"><a name="l00695"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga16f5fe34ccce68c2fada1224c054a999">  695</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA3_224                        ((psa_algorithm_t)0x01000010)</span></div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;</div><div class="line"><a name="l00697"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaace70d9515489bbe3c5e7ac1b7d9155b">  697</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA3_256                        ((psa_algorithm_t)0x01000011)</span></div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;</div><div class="line"><a name="l00699"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gab0f079257ea75e2acfe2fc3b38c78cd8">  699</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA3_384                        ((psa_algorithm_t)0x01000012)</span></div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;</div><div class="line"><a name="l00701"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga37e5dbe936dddb155e76f2997de27188">  701</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA3_512                        ((psa_algorithm_t)0x01000013)</span></div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;</div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;<span class="preprocessor">#define PSA_ALG_MAC_SUBCATEGORY_MASK            ((psa_algorithm_t)0x00c00000)</span></div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;<span class="preprocessor">#define PSA_ALG_HMAC_BASE                       ((psa_algorithm_t)0x02800000)</span></div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;</div><div class="line"><a name="l00716"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga70f397425684b3efcde1e0e34c28261f">  716</a></span>&#160;<span class="preprocessor">#define PSA_ALG_HMAC(hash_alg)                                  \</span></div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;<span class="preprocessor">    (PSA_ALG_HMAC_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;</div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;<span class="preprocessor">#define PSA_ALG_HMAC_GET_HASH(hmac_alg)                             \</span></div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;<span class="preprocessor">    (PSA_ALG_CATEGORY_HASH | ((hmac_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;</div><div class="line"><a name="l00732"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga4a050c3c3cbc6eb96418f18847601c8a">  732</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_HMAC(alg)                                            \</span></div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;<span class="preprocessor">    (((alg) &amp; (PSA_ALG_CATEGORY_MASK | PSA_ALG_MAC_SUBCATEGORY_MASK)) == \</span></div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;<span class="preprocessor">     PSA_ALG_HMAC_BASE)</span></div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;<span class="comment">/* In the encoding of a MAC algorithm, the bits corresponding to</span></div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;<span class="comment"> * PSA_ALG_MAC_TRUNCATION_MASK encode the length to which the MAC is</span></div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;<span class="comment"> * truncated. As an exception, the value 0 means the untruncated algorithm,</span></div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;<span class="comment"> * whatever its length is. The length is encoded in 6 bits, so it can</span></div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;<span class="comment"> * reach up to 63; the largest MAC is 64 bytes so its trivial truncation</span></div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;<span class="comment"> * to full length is correctly encoded as 0 and any non-trivial truncation</span></div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;<span class="comment"> * is correctly encoded as a value between 1 and 63. */</span></div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;<span class="preprocessor">#define PSA_ALG_MAC_TRUNCATION_MASK             ((psa_algorithm_t)0x00003f00)</span></div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;<span class="preprocessor">#define PSA_MAC_TRUNCATION_OFFSET 8</span></div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;</div><div class="line"><a name="l00779"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaf36137110baf7bb13c5028fd62c64276">  779</a></span>&#160;<span class="preprocessor">#define PSA_ALG_TRUNCATED_MAC(alg, mac_length)                          \</span></div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_MAC_TRUNCATION_MASK) |                           \</span></div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;<span class="preprocessor">     ((mac_length) &lt;&lt; PSA_MAC_TRUNCATION_OFFSET &amp; PSA_ALG_MAC_TRUNCATION_MASK))</span></div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;</div><div class="line"><a name="l00795"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaa05a8d99634f3350597ac9284fb70cb1">  795</a></span>&#160;<span class="preprocessor">#define PSA_ALG_FULL_LENGTH_MAC(alg)            \</span></div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;<span class="preprocessor">    ((alg) &amp; ~PSA_ALG_MAC_TRUNCATION_MASK)</span></div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;</div><div class="line"><a name="l00809"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gab03726c4476174e019a08e2a04018ce8">  809</a></span>&#160;<span class="preprocessor">#define PSA_MAC_TRUNCATED_LENGTH(alg)           \</span></div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_MAC_TRUNCATION_MASK) &gt;&gt; PSA_MAC_TRUNCATION_OFFSET)</span></div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;</div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;<span class="preprocessor">#define PSA_ALG_CIPHER_MAC_BASE                 ((psa_algorithm_t)0x02c00000)</span></div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;<span class="preprocessor">#define PSA_ALG_CBC_MAC                         ((psa_algorithm_t)0x02c00001)</span></div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;<span class="preprocessor">#define PSA_ALG_CMAC                            ((psa_algorithm_t)0x02c00002)</span></div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;<span class="preprocessor">#define PSA_ALG_GMAC                            ((psa_algorithm_t)0x02c00003)</span></div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;</div><div class="line"><a name="l00825"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gae49d1eb601125d65a5c5b252aa45479e">  825</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_BLOCK_CIPHER_MAC(alg)                                \</span></div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;<span class="preprocessor">    (((alg) &amp; (PSA_ALG_CATEGORY_MASK | PSA_ALG_MAC_SUBCATEGORY_MASK)) == \</span></div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;<span class="preprocessor">     PSA_ALG_CIPHER_MAC_BASE)</span></div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;<span class="preprocessor">#define PSA_ALG_CIPHER_STREAM_FLAG              ((psa_algorithm_t)0x00800000)</span></div><div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;<span class="preprocessor">#define PSA_ALG_CIPHER_FROM_BLOCK_FLAG          ((psa_algorithm_t)0x00400000)</span></div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;</div><div class="line"><a name="l00844"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gacfec68e0c6175e02e1b2ebc97df383c0">  844</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_STREAM_CIPHER(alg)            \</span></div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;<span class="preprocessor">    (((alg) &amp; (PSA_ALG_CATEGORY_MASK | PSA_ALG_CIPHER_STREAM_FLAG)) == \</span></div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;<span class="preprocessor">        (PSA_ALG_CATEGORY_CIPHER | PSA_ALG_CIPHER_STREAM_FLAG))</span></div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;</div><div class="line"><a name="l00850"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gab6a5284decb0e5e1b5b8740a41ef3c5e">  850</a></span>&#160;<span class="preprocessor">#define PSA_ALG_ARC4                            ((psa_algorithm_t)0x04800001)</span></div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;</div><div class="line"><a name="l00859"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gad318309706a769cffdc64e4c7e06b2e9">  859</a></span>&#160;<span class="preprocessor">#define PSA_ALG_CTR                             ((psa_algorithm_t)0x04c00001)</span></div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;</div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;<span class="preprocessor">#define PSA_ALG_CFB                             ((psa_algorithm_t)0x04c00002)</span></div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;</div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;<span class="preprocessor">#define PSA_ALG_OFB                             ((psa_algorithm_t)0x04c00003)</span></div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;</div><div class="line"><a name="l00871"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaa722c0e426a797fd6d99623f59748125">  871</a></span>&#160;<span class="preprocessor">#define PSA_ALG_XTS                             ((psa_algorithm_t)0x044000ff)</span></div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;</div><div class="line"><a name="l00880"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gacb332d72716958880ee7f97d8365ae66">  880</a></span>&#160;<span class="preprocessor">#define PSA_ALG_CBC_NO_PADDING                  ((psa_algorithm_t)0x04600100)</span></div><div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;</div><div class="line"><a name="l00888"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaef50d2e9716eb6d476046608e4e0c78c">  888</a></span>&#160;<span class="preprocessor">#define PSA_ALG_CBC_PKCS7                       ((psa_algorithm_t)0x04600101)</span></div><div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;</div><div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;<span class="preprocessor">#define PSA_ALG_CCM                             ((psa_algorithm_t)0x06001001)</span></div><div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;<span class="preprocessor">#define PSA_ALG_GCM                             ((psa_algorithm_t)0x06001002)</span></div><div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;</div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;<span class="comment">/* In the encoding of a AEAD algorithm, the bits corresponding to</span></div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;<span class="comment"> * PSA_ALG_AEAD_TAG_LENGTH_MASK encode the length of the AEAD tag.</span></div><div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;<span class="comment"> * The constants for default lengths follow this encoding.</span></div><div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;<span class="preprocessor">#define PSA_ALG_AEAD_TAG_LENGTH_MASK            ((psa_algorithm_t)0x00003f00)</span></div><div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;<span class="preprocessor">#define PSA_AEAD_TAG_LENGTH_OFFSET 8</span></div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;</div><div class="line"><a name="l00918"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaa63c520b62ab001d54d28801742fc9db">  918</a></span>&#160;<span class="preprocessor">#define PSA_ALG_AEAD_WITH_TAG_LENGTH(alg, tag_length)                   \</span></div><div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_AEAD_TAG_LENGTH_MASK) |                          \</span></div><div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;<span class="preprocessor">     ((tag_length) &lt;&lt; PSA_AEAD_TAG_LENGTH_OFFSET &amp;                      \</span></div><div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;<span class="preprocessor">      PSA_ALG_AEAD_TAG_LENGTH_MASK))</span></div><div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;</div><div class="line"><a name="l00931"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaddea507e062250cda8a29407a9480d2b">  931</a></span>&#160;<span class="preprocessor">#define PSA_ALG_AEAD_WITH_DEFAULT_TAG_LENGTH(alg)                       \</span></div><div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;<span class="preprocessor">    (                                                                   \</span></div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;<span class="preprocessor">        PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE(alg, PSA_ALG_CCM)   \</span></div><div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;<span class="preprocessor">        PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE(alg, PSA_ALG_GCM)   \</span></div><div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;<span class="preprocessor">        0)</span></div><div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;<span class="preprocessor">#define PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE(alg, ref) \</span></div><div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;<span class="preprocessor">    PSA_ALG_AEAD_WITH_TAG_LENGTH(alg, 0) == \</span></div><div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;<span class="preprocessor">    PSA_ALG_AEAD_WITH_TAG_LENGTH(ref, 0) ?  \</span></div><div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;<span class="preprocessor">    ref :</span></div><div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;</div><div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;<span class="preprocessor">#define PSA_ALG_RSA_PKCS1V15_SIGN_BASE          ((psa_algorithm_t)0x10020000)</span></div><div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;</div><div class="line"><a name="l00955"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga702ff75385a6ae7d4247033f479439af">  955</a></span>&#160;<span class="preprocessor">#define PSA_ALG_RSA_PKCS1V15_SIGN(hash_alg)                             \</span></div><div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;<span class="preprocessor">    (PSA_ALG_RSA_PKCS1V15_SIGN_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;</div><div class="line"><a name="l00963"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga4215e2a78dcf834e9a625927faa2a817">  963</a></span>&#160;<span class="preprocessor">#define PSA_ALG_RSA_PKCS1V15_SIGN_RAW PSA_ALG_RSA_PKCS1V15_SIGN_BASE</span></div><div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_RSA_PKCS1V15_SIGN(alg)                               \</span></div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PKCS1V15_SIGN_BASE)</span></div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;</div><div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;<span class="preprocessor">#define PSA_ALG_RSA_PSS_BASE               ((psa_algorithm_t)0x10030000)</span></div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;</div><div class="line"><a name="l00984"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga62152bf4cb4bf6aace5e1be8f143564d">  984</a></span>&#160;<span class="preprocessor">#define PSA_ALG_RSA_PSS(hash_alg)                               \</span></div><div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;<span class="preprocessor">    (PSA_ALG_RSA_PSS_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_RSA_PSS(alg)                                 \</span></div><div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PSS_BASE)</span></div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;</div><div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;<span class="preprocessor">#define PSA_ALG_DSA_BASE                        ((psa_algorithm_t)0x10040000)</span></div><div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;</div><div class="line"><a name="l01002"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga9a68efdddff5ae95f104a1416b12742e"> 1002</a></span>&#160;<span class="preprocessor">#define PSA_ALG_DSA(hash_alg)                             \</span></div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;<span class="preprocessor">    (PSA_ALG_DSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;<span class="preprocessor">#define PSA_ALG_DETERMINISTIC_DSA_BASE          ((psa_algorithm_t)0x10050000)</span></div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;<span class="preprocessor">#define PSA_ALG_DSA_DETERMINISTIC_FLAG          ((psa_algorithm_t)0x00010000)</span></div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;<span class="preprocessor">#define PSA_ALG_DETERMINISTIC_DSA(hash_alg)                             \</span></div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;<span class="preprocessor">    (PSA_ALG_DETERMINISTIC_DSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_DSA(alg)                                             \</span></div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_HASH_MASK &amp; ~PSA_ALG_DSA_DETERMINISTIC_FLAG) ==  \</span></div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;<span class="preprocessor">     PSA_ALG_DSA_BASE)</span></div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;<span class="preprocessor">#define PSA_ALG_DSA_IS_DETERMINISTIC(alg)               \</span></div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_DSA_DETERMINISTIC_FLAG) != 0)</span></div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_DETERMINISTIC_DSA(alg)                       \</span></div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;<span class="preprocessor">    (PSA_ALG_IS_DSA(alg) &amp;&amp; PSA_ALG_DSA_IS_DETERMINISTIC(alg))</span></div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_RANDOMIZED_DSA(alg)                          \</span></div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;<span class="preprocessor">    (PSA_ALG_IS_DSA(alg) &amp;&amp; !PSA_ALG_DSA_IS_DETERMINISTIC(alg))</span></div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;<span class="preprocessor">#define PSA_ALG_ECDSA_BASE                      ((psa_algorithm_t)0x10060000)</span></div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;</div><div class="line"><a name="l01037"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga7e3ce9f514a227d5ba5d8318870452e3"> 1037</a></span>&#160;<span class="preprocessor">#define PSA_ALG_ECDSA(hash_alg)                                 \</span></div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;<span class="preprocessor">    (PSA_ALG_ECDSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;</div><div class="line"><a name="l01048"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga51d6b6044a62e33cae0cf64bfc3b22a4"> 1048</a></span>&#160;<span class="preprocessor">#define PSA_ALG_ECDSA_ANY PSA_ALG_ECDSA_BASE</span></div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;<span class="preprocessor">#define PSA_ALG_DETERMINISTIC_ECDSA_BASE        ((psa_algorithm_t)0x10070000)</span></div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;</div><div class="line"><a name="l01070"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga11da566bcd341661c8de921e2ca5ed03"> 1070</a></span>&#160;<span class="preprocessor">#define PSA_ALG_DETERMINISTIC_ECDSA(hash_alg)                           \</span></div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;<span class="preprocessor">    (PSA_ALG_DETERMINISTIC_ECDSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_ECDSA(alg)                                           \</span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_HASH_MASK &amp; ~PSA_ALG_DSA_DETERMINISTIC_FLAG) ==  \</span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;<span class="preprocessor">     PSA_ALG_ECDSA_BASE)</span></div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;<span class="preprocessor">#define PSA_ALG_ECDSA_IS_DETERMINISTIC(alg)             \</span></div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_DSA_DETERMINISTIC_FLAG) != 0)</span></div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_DETERMINISTIC_ECDSA(alg)                             \</span></div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;<span class="preprocessor">    (PSA_ALG_IS_ECDSA(alg) &amp;&amp; PSA_ALG_ECDSA_IS_DETERMINISTIC(alg))</span></div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_RANDOMIZED_ECDSA(alg)                                \</span></div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;<span class="preprocessor">    (PSA_ALG_IS_ECDSA(alg) &amp;&amp; !PSA_ALG_ECDSA_IS_DETERMINISTIC(alg))</span></div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;</div><div class="line"><a name="l01100"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga24cf6d7bcd2b9aeeeff86f07b6c674e3"> 1100</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SIGN_GET_HASH(alg)                                     \</span></div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;<span class="preprocessor">    (PSA_ALG_IS_RSA_PSS(alg) || PSA_ALG_IS_RSA_PKCS1V15_SIGN(alg) ||   \</span></div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;<span class="preprocessor">     PSA_ALG_IS_DSA(alg) || PSA_ALG_IS_ECDSA(alg) ?                    \</span></div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;<span class="preprocessor">     ((alg) &amp; PSA_ALG_HASH_MASK) == 0 ? </span><span class="comment">/*&quot;raw&quot; algorithm*/</span><span class="preprocessor"> 0 :        \</span></div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;<span class="preprocessor">     ((alg) &amp; PSA_ALG_HASH_MASK) | PSA_ALG_CATEGORY_HASH :             \</span></div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;<span class="preprocessor">     0)</span></div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;</div><div class="line"><a name="l01109"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga4c540d3abe43fb9abcb94f2bc51acef9"> 1109</a></span>&#160;<span class="preprocessor">#define PSA_ALG_RSA_PKCS1V15_CRYPT              ((psa_algorithm_t)0x12020000)</span></div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;<span class="preprocessor">#define PSA_ALG_RSA_OAEP_BASE                   ((psa_algorithm_t)0x12030000)</span></div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;</div><div class="line"><a name="l01126"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaa1235dc3fdd9839c6c1b1a9857344c76"> 1126</a></span>&#160;<span class="preprocessor">#define PSA_ALG_RSA_OAEP(hash_alg)                              \</span></div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;<span class="preprocessor">    (PSA_ALG_RSA_OAEP_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_RSA_OAEP(alg)                                \</span></div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_OAEP_BASE)</span></div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;<span class="preprocessor">#define PSA_ALG_RSA_OAEP_GET_HASH(alg)                          \</span></div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;<span class="preprocessor">    (PSA_ALG_IS_RSA_OAEP(alg) ?                                 \</span></div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;<span class="preprocessor">     ((alg) &amp; PSA_ALG_HASH_MASK) | PSA_ALG_CATEGORY_HASH :      \</span></div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;<span class="preprocessor">     0)</span></div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;<span class="preprocessor">#define PSA_ALG_HKDF_BASE                       ((psa_algorithm_t)0x30000100)</span></div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;</div><div class="line"><a name="l01147"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga32a888fb360e6e25cab8a343772c4a82"> 1147</a></span>&#160;<span class="preprocessor">#define PSA_ALG_HKDF(hash_alg)                                  \</span></div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;<span class="preprocessor">    (PSA_ALG_HKDF_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;</div><div class="line"><a name="l01160"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga1979d0a76fcee6164cf2e65960f38db2"> 1160</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_HKDF(alg)                            \</span></div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_HKDF_BASE)</span></div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;<span class="preprocessor">#define PSA_ALG_HKDF_GET_HASH(hkdf_alg)                         \</span></div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;<span class="preprocessor">    (PSA_ALG_CATEGORY_HASH | ((hkdf_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;<span class="preprocessor">#define PSA_ALG_TLS12_PRF_BASE                     ((psa_algorithm_t)0x30000200)</span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;</div><div class="line"><a name="l01188"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga6d5623c2ccda1d4a84e34351af8382d5"> 1188</a></span>&#160;<span class="preprocessor">#define PSA_ALG_TLS12_PRF(hash_alg)                                  \</span></div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;<span class="preprocessor">    (PSA_ALG_TLS12_PRF_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;</div><div class="line"><a name="l01199"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaa3c18890c50222e5219f40ade8927e66"> 1199</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_TLS12_PRF(alg)                                    \</span></div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_TLS12_PRF_BASE)</span></div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;<span class="preprocessor">#define PSA_ALG_TLS12_PRF_GET_HASH(hkdf_alg)                         \</span></div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;<span class="preprocessor">    (PSA_ALG_CATEGORY_HASH | ((hkdf_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;<span class="preprocessor">#define PSA_ALG_TLS12_PSK_TO_MS_BASE ((psa_algorithm_t)0x30000300)</span></div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;</div><div class="line"><a name="l01228"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga039ec797f15d1635d9b2e09a611f8a68"> 1228</a></span>&#160;<span class="preprocessor">#define PSA_ALG_TLS12_PSK_TO_MS(hash_alg)                                  \</span></div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;<span class="preprocessor">    (PSA_ALG_TLS12_PSK_TO_MS_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;</div><div class="line"><a name="l01239"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gab25ecc074a93fd11069bedfbba5a287b"> 1239</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_TLS12_PSK_TO_MS(alg)                                    \</span></div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_TLS12_PSK_TO_MS_BASE)</span></div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;<span class="preprocessor">#define PSA_ALG_TLS12_PSK_TO_MS_GET_HASH(hkdf_alg)                         \</span></div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;<span class="preprocessor">    (PSA_ALG_CATEGORY_HASH | ((hkdf_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;<span class="preprocessor">#define PSA_ALG_KEY_DERIVATION_MASK             ((psa_algorithm_t)0x010fffff)</span></div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;</div><div class="line"><a name="l01256"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gacbbcb60abf1714722f50f80ce9c21602"> 1256</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SELECT_RAW                      ((psa_algorithm_t)0x31000001)</span></div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;<span class="preprocessor">#define PSA_ALG_KEY_AGREEMENT_GET_KDF(alg)                              \</span></div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_KEY_DERIVATION_MASK) | PSA_ALG_CATEGORY_KEY_DERIVATION)</span></div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;<span class="preprocessor">#define PSA_ALG_KEY_AGREEMENT_GET_BASE(alg)                              \</span></div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;<span class="preprocessor">    ((alg) &amp; ~PSA_ALG_KEY_DERIVATION_MASK)</span></div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;<span class="preprocessor">#define PSA_ALG_FFDH_BASE                       ((psa_algorithm_t)0x22100000)</span></div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;</div><div class="line"><a name="l01287"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga21037568ad0b2e97d76dfc700b6b4483"> 1287</a></span>&#160;<span class="preprocessor">#define PSA_ALG_FFDH(kdf_alg) \</span></div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;<span class="preprocessor">    (PSA_ALG_FFDH_BASE | ((kdf_alg) &amp; PSA_ALG_KEY_DERIVATION_MASK))</span></div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;</div><div class="line"><a name="l01300"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaa3cf76164cd9375af4fb8a291078a19e"> 1300</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_FFDH(alg) \</span></div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;<span class="preprocessor">    (PSA_ALG_KEY_AGREEMENT_GET_BASE(alg) == PSA_ALG_FFDH_BASE)</span></div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;<span class="preprocessor">#define PSA_ALG_ECDH_BASE                       ((psa_algorithm_t)0x22200000)</span></div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;</div><div class="line"><a name="l01343"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga974b73fccc5a9142256d8ce3092dff7f"> 1343</a></span>&#160;<span class="preprocessor">#define PSA_ALG_ECDH(kdf_alg) \</span></div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;<span class="preprocessor">    (PSA_ALG_ECDH_BASE | ((kdf_alg) &amp; PSA_ALG_KEY_DERIVATION_MASK))</span></div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;</div><div class="line"><a name="l01358"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga9d9b6533d2a6bea7bac7ae01facb820d"> 1358</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_ECDH(alg) \</span></div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;<span class="preprocessor">    (PSA_ALG_KEY_AGREEMENT_GET_BASE(alg) == PSA_ALG_ECDH_BASE)</span></div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;</div><div class="line"><a name="l01369"></a><span class="lineno"><a class="line" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf"> 1369</a></span>&#160;<span class="keyword">typedef</span> uint32_t <a class="code" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a>;</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;</div><div class="line"><a name="l01373"></a><span class="lineno"><a class="line" href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b"> 1373</a></span>&#160;<span class="keyword">typedef</span> uint32_t <a class="code" href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">psa_key_id_t</a>;</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;</div><div class="line"><a name="l01378"></a><span class="lineno"><a class="line" href="group__key__lifetimes.html#ga8b438870ba69489b685730d346455108"> 1378</a></span>&#160;<span class="preprocessor">#define PSA_KEY_LIFETIME_VOLATILE               ((psa_key_lifetime_t)0x00000000)</span></div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;</div><div class="line"><a name="l01392"></a><span class="lineno"><a class="line" href="group__key__lifetimes.html#ga3713a01c5fcd5f7eae46ff22ceaf6d02"> 1392</a></span>&#160;<span class="preprocessor">#define PSA_KEY_LIFETIME_PERSISTENT             ((psa_key_lifetime_t)0x00000001)</span></div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;</div><div class="line"><a name="l01401"></a><span class="lineno"><a class="line" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25"> 1401</a></span>&#160;<span class="keyword">typedef</span> uint32_t <a class="code" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>;</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;</div><div class="line"><a name="l01414"></a><span class="lineno"><a class="line" href="group__policy.html#ga7dddccdd1303176e87a4d20c87b589ed"> 1414</a></span>&#160;<span class="preprocessor">#define PSA_KEY_USAGE_EXPORT                    ((psa_key_usage_t)0x00000001)</span></div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;</div><div class="line"><a name="l01425"></a><span class="lineno"><a class="line" href="group__policy.html#ga75153b296d045d529d97203a6a995dad"> 1425</a></span>&#160;<span class="preprocessor">#define PSA_KEY_USAGE_ENCRYPT                   ((psa_key_usage_t)0x00000100)</span></div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;</div><div class="line"><a name="l01436"></a><span class="lineno"><a class="line" href="group__policy.html#gac3f2d2e5983db1edde9f142ca9bf8e6a"> 1436</a></span>&#160;<span class="preprocessor">#define PSA_KEY_USAGE_DECRYPT                   ((psa_key_usage_t)0x00000200)</span></div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;</div><div class="line"><a name="l01446"></a><span class="lineno"><a class="line" href="group__policy.html#ga99b9f456cf59efc4b5579465407aef5a"> 1446</a></span>&#160;<span class="preprocessor">#define PSA_KEY_USAGE_SIGN                      ((psa_key_usage_t)0x00000400)</span></div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;</div><div class="line"><a name="l01456"></a><span class="lineno"><a class="line" href="group__policy.html#ga39b54ffd5958b69634607924fa53cea6"> 1456</a></span>&#160;<span class="preprocessor">#define PSA_KEY_USAGE_VERIFY                    ((psa_key_usage_t)0x00000800)</span></div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;</div><div class="line"><a name="l01460"></a><span class="lineno"><a class="line" href="group__policy.html#gaf19022acc5ef23cf12477f632b48a0b2"> 1460</a></span>&#160;<span class="preprocessor">#define PSA_KEY_USAGE_DERIVE                    ((psa_key_usage_t)0x00001000)</span></div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* PSA_CRYPTO_ENUM_H */</span><span class="preprocessor"></span></div><div class="ttc" id="group__crypto__types_html_ga4e8977c145cce5077c4bce7fec890ad9"><div class="ttname"><a href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a></div><div class="ttdeci">uint16_t psa_ecc_curve_t</div><div class="ttdef"><b>Definition:</b> crypto_enum.h:480</div></div>
+<div class="ttc" id="group__key__lifetimes_html_ga11e986351c65bd3dc3c0fe2cd9926e4b"><div class="ttname"><a href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">psa_key_id_t</a></div><div class="ttdeci">uint32_t psa_key_id_t</div><div class="ttdef"><b>Definition:</b> crypto_enum.h:1373</div></div>
+<div class="ttc" id="group__crypto__types_html_gac2e4d47f1300d73c2f829a6d99252d69"><div class="ttname"><a href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a></div><div class="ttdeci">uint32_t psa_algorithm_t</div><div class="ttdoc">Encoding of a cryptographic algorithm. </div><div class="ttdef"><b>Definition:</b> crypto_enum.h:557</div></div>
+<div class="ttc" id="group__policy_html_ga7bb9de71337e0e98de843aa7f9b55f25"><div class="ttname"><a href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a></div><div class="ttdeci">uint32_t psa_key_usage_t</div><div class="ttdoc">Encoding of permitted usage on a key. </div><div class="ttdef"><b>Definition:</b> crypto_enum.h:1401</div></div>
+<div class="ttc" id="group__crypto__types_html_ga578159487dfc7096cb191b0d2befe628"><div class="ttname"><a href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a></div><div class="ttdeci">uint32_t psa_key_type_t</div><div class="ttdoc">Encoding of a key type. </div><div class="ttdef"><b>Definition:</b> crypto_enum.h:315</div></div>
+<div class="ttc" id="group__key__lifetimes_html_ga6821ff6dd39dc2bc370ded760ad8b0cf"><div class="ttname"><a href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a></div><div class="ttdeci">uint32_t psa_key_lifetime_t</div><div class="ttdef"><b>Definition:</b> crypto_enum.h:1369</div></div>
+<div class="ttc" id="group__error_html_ga05676e70ba5c6a7565aff3c36677c1f9"><div class="ttname"><a href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a></div><div class="ttdeci">int32_t psa_status_t</div><div class="ttdoc">Function return status. </div><div class="ttdef"><b>Definition:</b> crypto_enum.h:66</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/crypto__sizes_8h.html b/docs/html/crypto__sizes_8h.html
new file mode 100644
index 0000000..86f0472
--- /dev/null
+++ b/docs/html/crypto__sizes_8h.html
@@ -0,0 +1,720 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: psa/crypto_sizes.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_7dae9cfde651cd3cb034485ce5e391b9.html">psa</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a>  </div>
+  <div class="headertitle">
+<div class="title">crypto_sizes.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>PSA cryptography module: Mbed TLS buffer size macros.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;../mbedtls/config.h&quot;</code><br />
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for crypto_sizes.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="crypto__sizes_8h__incl.png" border="0" usemap="#psa_2crypto__sizes_8h" alt=""/></div>
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="crypto__sizes_8h__dep__incl.png" border="0" usemap="#psa_2crypto__sizes_8hdep" alt=""/></div>
+<map name="psa_2crypto__sizes_8hdep" id="psa_2crypto__sizes_8hdep">
+<area shape="rect" id="node2" href="crypto_8h.html" title="Platform Security Architecture cryptography module. " alt="" coords="24,80,119,107"/>
+</map>
+</div>
+</div>
+<p><a href="crypto__sizes_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:af2edfe992db358f8eefd4bc82d069592"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2edfe992db358f8eefd4bc82d069592"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_BITS_TO_BYTES</b>(bits)&#160;&#160;&#160;(((bits) + 7) / 8)</td></tr>
+<tr class="separator:af2edfe992db358f8eefd4bc82d069592"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a997f71feb68cca794f7ed676600e06db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a997f71feb68cca794f7ed676600e06db"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_BYTES_TO_BITS</b>(bytes)&#160;&#160;&#160;((bytes) * 8)</td></tr>
+<tr class="separator:a997f71feb68cca794f7ed676600e06db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aef340331ce3cba2b57e1fc5624bf1f99"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__sizes_8h.html#aef340331ce3cba2b57e1fc5624bf1f99">PSA_HASH_SIZE</a>(alg)</td></tr>
+<tr class="separator:aef340331ce3cba2b57e1fc5624bf1f99"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6ce1014efbbc0bcca286ef7f9a72cb29"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__sizes_8h.html#a6ce1014efbbc0bcca286ef7f9a72cb29">PSA_HASH_MAX_SIZE</a>&#160;&#160;&#160;64</td></tr>
+<tr class="separator:a6ce1014efbbc0bcca286ef7f9a72cb29"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a123539632874601194b1d86a398e14ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a123539632874601194b1d86a398e14ff"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_HMAC_MAX_HASH_BLOCK_SIZE</b>&#160;&#160;&#160;128</td></tr>
+<tr class="separator:a123539632874601194b1d86a398e14ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4681cc4f6226883a2160122c562ca682"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__sizes_8h.html#a4681cc4f6226883a2160122c562ca682">PSA_MAC_MAX_SIZE</a>&#160;&#160;&#160;<a class="el" href="crypto__sizes_8h.html#a6ce1014efbbc0bcca286ef7f9a72cb29">PSA_HASH_MAX_SIZE</a></td></tr>
+<tr class="separator:a4681cc4f6226883a2160122c562ca682"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8e3079b2e624cb8d32b94843cddada49"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__sizes_8h.html#a8e3079b2e624cb8d32b94843cddada49">PSA_AEAD_TAG_LENGTH</a>(alg)</td></tr>
+<tr class="separator:a8e3079b2e624cb8d32b94843cddada49"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2ab9324235c63e9e8cdee5bb1793eabe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ab9324235c63e9e8cdee5bb1793eabe"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_VENDOR_RSA_MAX_KEY_BITS</b>&#160;&#160;&#160;4096</td></tr>
+<tr class="separator:a2ab9324235c63e9e8cdee5bb1793eabe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a81080a6cbbab87f35b114cb991e3f550"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a81080a6cbbab87f35b114cb991e3f550"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_VENDOR_ECC_MAX_CURVE_BITS</b>&#160;&#160;&#160;521</td></tr>
+<tr class="separator:a81080a6cbbab87f35b114cb991e3f550"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab589ea3b86f2bfa18880459299c58f8a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__sizes_8h.html#ab589ea3b86f2bfa18880459299c58f8a">PSA_ALG_TLS12_PSK_TO_MS_MAX_PSK_LEN</a>&#160;&#160;&#160;128</td></tr>
+<tr class="separator:ab589ea3b86f2bfa18880459299c58f8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad755101764dba14589e5919ee41be7ca"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__sizes_8h.html#ad755101764dba14589e5919ee41be7ca">PSA_ASYMMETRIC_SIGNATURE_MAX_SIZE</a></td></tr>
+<tr class="separator:ad755101764dba14589e5919ee41be7ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa3cfcff0291d6da279fec8fe834d5dec"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__sizes_8h.html#aa3cfcff0291d6da279fec8fe834d5dec">PSA_MAX_BLOCK_CIPHER_BLOCK_SIZE</a>&#160;&#160;&#160;16</td></tr>
+<tr class="separator:aa3cfcff0291d6da279fec8fe834d5dec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa84c5fb384ac7cb1bfc52adde96588ee"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__sizes_8h.html#aa84c5fb384ac7cb1bfc52adde96588ee">PSA_MAC_FINAL_SIZE</a>(key_type,  key_bits,  alg)</td></tr>
+<tr class="separator:aa84c5fb384ac7cb1bfc52adde96588ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a85667d47a7aa6c7b99a80e5273671266"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__sizes_8h.html#a85667d47a7aa6c7b99a80e5273671266">PSA_AEAD_ENCRYPT_OUTPUT_SIZE</a>(alg,  plaintext_length)</td></tr>
+<tr class="separator:a85667d47a7aa6c7b99a80e5273671266"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af45d92c1d7ef43822b8df21ab1117d3f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__sizes_8h.html#af45d92c1d7ef43822b8df21ab1117d3f">PSA_AEAD_FINISH_OUTPUT_SIZE</a>(alg,  plaintext_length)&#160;&#160;&#160;((size_t)0)</td></tr>
+<tr class="separator:af45d92c1d7ef43822b8df21ab1117d3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1d057796166c16eb673ad1997e48a60b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__sizes_8h.html#a1d057796166c16eb673ad1997e48a60b">PSA_AEAD_DECRYPT_OUTPUT_SIZE</a>(alg,  ciphertext_length)</td></tr>
+<tr class="separator:a1d057796166c16eb673ad1997e48a60b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aec0bcba60e7514b83f967b171d494ed3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_RSA_MINIMUM_PADDING_SIZE</b>(alg)</td></tr>
+<tr class="separator:aec0bcba60e7514b83f967b171d494ed3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10c472a35f04051add6b20cc228ffc11"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__sizes_8h.html#a10c472a35f04051add6b20cc228ffc11">PSA_ECDSA_SIGNATURE_SIZE</a>(curve_bits)&#160;&#160;&#160;(PSA_BITS_TO_BYTES(curve_bits) * 2)</td></tr>
+<tr class="memdesc:a10c472a35f04051add6b20cc228ffc11"><td class="mdescLeft">&#160;</td><td class="mdescRight">ECDSA signature size for a given curve bit size.  <a href="#a10c472a35f04051add6b20cc228ffc11">More...</a><br /></td></tr>
+<tr class="separator:a10c472a35f04051add6b20cc228ffc11"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a77565b9b4fe6d8730fd2120f4c8378ab"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__sizes_8h.html#a77565b9b4fe6d8730fd2120f4c8378ab">PSA_ASYMMETRIC_SIGN_OUTPUT_SIZE</a>(key_type,  key_bits,  alg)</td></tr>
+<tr class="separator:a77565b9b4fe6d8730fd2120f4c8378ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a66ba3bd93e5ec52870ccc3848778bad8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__sizes_8h.html#a66ba3bd93e5ec52870ccc3848778bad8">PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE</a>(key_type,  key_bits,  alg)</td></tr>
+<tr class="separator:a66ba3bd93e5ec52870ccc3848778bad8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61a246f3eac41989821d982e56fea6c1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__sizes_8h.html#a61a246f3eac41989821d982e56fea6c1">PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE</a>(key_type,  key_bits,  alg)</td></tr>
+<tr class="separator:a61a246f3eac41989821d982e56fea6c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6a30ddc479486f4c5db1c759c3d052c2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a30ddc479486f4c5db1c759c3d052c2"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE</b>(bits)&#160;&#160;&#160;((bits) / 8 + 5)</td></tr>
+<tr class="separator:a6a30ddc479486f4c5db1c759c3d052c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0fffdb6216268eb6455cc83a854c8acf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0fffdb6216268eb6455cc83a854c8acf"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_EXPORT_RSA_PUBLIC_KEY_MAX_SIZE</b>(key_bits)&#160;&#160;&#160;(PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE(key_bits) + 36)</td></tr>
+<tr class="separator:a0fffdb6216268eb6455cc83a854c8acf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a590f9d3da465c0422d7ba60ac2e9d98d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a590f9d3da465c0422d7ba60ac2e9d98d"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_EXPORT_RSA_KEYPAIR_MAX_SIZE</b>(key_bits)&#160;&#160;&#160;(9 * PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE((key_bits) / 2 + 1) + 14)</td></tr>
+<tr class="separator:a590f9d3da465c0422d7ba60ac2e9d98d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaee3efce949efb49d0d13110051ad2a0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaee3efce949efb49d0d13110051ad2a0"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_EXPORT_DSA_PUBLIC_KEY_MAX_SIZE</b>(key_bits)&#160;&#160;&#160;(PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE(key_bits) * 3 + 59)</td></tr>
+<tr class="separator:aaee3efce949efb49d0d13110051ad2a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee0cfc7f7b7b80374a0d7b03c9b91e01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee0cfc7f7b7b80374a0d7b03c9b91e01"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_EXPORT_DSA_KEYPAIR_MAX_SIZE</b>(key_bits)&#160;&#160;&#160;(PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE(key_bits) * 3 + 75)</td></tr>
+<tr class="separator:aee0cfc7f7b7b80374a0d7b03c9b91e01"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a221b29f08b4e5e0509a1c7cc11b623d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a221b29f08b4e5e0509a1c7cc11b623d0"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE</b>(key_bits)&#160;&#160;&#160;(2 * PSA_BITS_TO_BYTES(key_bits) + 36)</td></tr>
+<tr class="separator:a221b29f08b4e5e0509a1c7cc11b623d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae105bb3d5a09d323eb3e457d26bddd04"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae105bb3d5a09d323eb3e457d26bddd04"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_EXPORT_ECC_KEYPAIR_MAX_SIZE</b>(key_bits)&#160;&#160;&#160;(PSA_BITS_TO_BYTES(key_bits))</td></tr>
+<tr class="separator:ae105bb3d5a09d323eb3e457d26bddd04"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0aae885cc8ff92e00fb5248420b939c3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__sizes_8h.html#a0aae885cc8ff92e00fb5248420b939c3">PSA_KEY_EXPORT_MAX_SIZE</a>(key_type,  key_bits)</td></tr>
+<tr class="separator:a0aae885cc8ff92e00fb5248420b939c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>PSA cryptography module: Mbed TLS buffer size macros. </p>
+<dl class="section note"><dt>Note</dt><dd>This file may not be included directly. Applications must include <a class="el" href="crypto_8h.html" title="Platform Security Architecture cryptography module. ">psa/crypto.h</a>.</dd></dl>
+<p>This file contains the definitions of macros that are useful to compute buffer sizes. The signatures and semantics of these macros are standardized, but the definitions are not, because they depend on the available algorithms and, in some cases, on permitted tolerances on buffer sizes.</p>
+<p>In implementations with isolation between the application and the cryptography module, implementers should take care to ensure that the definitions that are exposed to applications match what the module implements.</p>
+<p>Macros that compute sizes whose values do not depend on the implementation are in <a class="el" href="crypto_8h.html" title="Platform Security Architecture cryptography module. ">crypto.h</a>. </p>
+</div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a1d057796166c16eb673ad1997e48a60b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_AEAD_DECRYPT_OUTPUT_SIZE</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">ciphertext_length&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(<a class="code" href="crypto__sizes_8h.html#a8e3079b2e624cb8d32b94843cddada49">PSA_AEAD_TAG_LENGTH</a>(alg) != 0 ?                              \</div><div class="line">     (plaintext_length) - <a class="code" href="crypto__sizes_8h.html#a8e3079b2e624cb8d32b94843cddada49">PSA_AEAD_TAG_LENGTH</a>(alg) :              \</div><div class="line">     0)</div><div class="ttc" id="crypto__sizes_8h_html_a8e3079b2e624cb8d32b94843cddada49"><div class="ttname"><a href="crypto__sizes_8h.html#a8e3079b2e624cb8d32b94843cddada49">PSA_AEAD_TAG_LENGTH</a></div><div class="ttdeci">#define PSA_AEAD_TAG_LENGTH(alg)</div><div class="ttdef"><b>Definition:</b> crypto_sizes.h:138</div></div>
+</div><!-- fragment --><p>The maximum size of the output of <a class="el" href="group__aead.html#gaa8ce6527f2e227f1071fadbf2099793b">psa_aead_decrypt()</a>, in bytes.</p>
+<p>If the size of the plaintext buffer is at least this large, it is guaranteed that <a class="el" href="group__aead.html#gaa8ce6527f2e227f1071fadbf2099793b">psa_aead_decrypt()</a> will not fail due to an insufficient buffer size. Depending on the algorithm, the actual size of the plaintext may be smaller.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An AEAD algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">PSA_ALG_IS_AEAD(alg)</a> is true). </td></tr>
+    <tr><td class="paramname">ciphertext_length</td><td>Size of the plaintext in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The AEAD ciphertext size for the specified algorithm. If the AEAD algorithm is not recognized, return 0. An implementation may return either 0 or a correct size for an AEAD algorithm that it recognizes, but does not support. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a85667d47a7aa6c7b99a80e5273671266"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_AEAD_ENCRYPT_OUTPUT_SIZE</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">plaintext_length&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(<a class="code" href="crypto__sizes_8h.html#a8e3079b2e624cb8d32b94843cddada49">PSA_AEAD_TAG_LENGTH</a>(alg) != 0 ?                              \</div><div class="line">     (plaintext_length) + <a class="code" href="crypto__sizes_8h.html#a8e3079b2e624cb8d32b94843cddada49">PSA_AEAD_TAG_LENGTH</a>(alg) :              \</div><div class="line">     0)</div><div class="ttc" id="crypto__sizes_8h_html_a8e3079b2e624cb8d32b94843cddada49"><div class="ttname"><a href="crypto__sizes_8h.html#a8e3079b2e624cb8d32b94843cddada49">PSA_AEAD_TAG_LENGTH</a></div><div class="ttdeci">#define PSA_AEAD_TAG_LENGTH(alg)</div><div class="ttdef"><b>Definition:</b> crypto_sizes.h:138</div></div>
+</div><!-- fragment --><p>The maximum size of the output of <a class="el" href="group__aead.html#ga44de092cf58bb6c820c5c80a6c51610d">psa_aead_encrypt()</a>, in bytes.</p>
+<p>If the size of the ciphertext buffer is at least this large, it is guaranteed that <a class="el" href="group__aead.html#ga44de092cf58bb6c820c5c80a6c51610d">psa_aead_encrypt()</a> will not fail due to an insufficient buffer size. Depending on the algorithm, the actual size of the ciphertext may be smaller.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An AEAD algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">PSA_ALG_IS_AEAD(alg)</a> is true). </td></tr>
+    <tr><td class="paramname">plaintext_length</td><td>Size of the plaintext in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The AEAD ciphertext size for the specified algorithm. If the AEAD algorithm is not recognized, return 0. An implementation may return either 0 or a correct size for an AEAD algorithm that it recognizes, but does not support. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="af45d92c1d7ef43822b8df21ab1117d3f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_AEAD_FINISH_OUTPUT_SIZE</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">plaintext_length&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td>&#160;&#160;&#160;((size_t)0)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The maximum size of the output of <a class="el" href="group__aead.html#ga759791bbe1763b377c3b5447641f1fc8">psa_aead_finish()</a>, in bytes.</p>
+<p>If the size of the ciphertext buffer is at least this large, it is guaranteed that <a class="el" href="group__aead.html#ga759791bbe1763b377c3b5447641f1fc8">psa_aead_finish()</a> will not fail due to an insufficient buffer size. Depending on the algorithm, the actual size of the ciphertext may be smaller.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An AEAD algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">PSA_ALG_IS_AEAD(alg)</a> is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The maximum trailing ciphertext size for the specified algorithm. If the AEAD algorithm is not recognized, return 0. An implementation may return either 0 or a correct size for an AEAD algorithm that it recognizes, but does not support. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a8e3079b2e624cb8d32b94843cddada49"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_AEAD_TAG_LENGTH</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(<a class="code" href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">PSA_ALG_IS_AEAD</a>(alg) ?                                             \</div><div class="line">     (((alg) &amp; PSA_ALG_AEAD_TAG_LENGTH_MASK) &gt;&gt; PSA_AEAD_TAG_LENGTH_OFFSET) : \</div><div class="line">     0)</div><div class="ttc" id="group__crypto__types_html_ga1d44829d60065eaa4ac9a703e7d6abc8"><div class="ttname"><a href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">PSA_ALG_IS_AEAD</a></div><div class="ttdeci">#define PSA_ALG_IS_AEAD(alg)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:591</div></div>
+</div><!-- fragment --><p>The tag size for an AEAD algorithm, in bytes.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An AEAD algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">PSA_ALG_IS_AEAD</a>(<code>alg</code>) is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The tag size for the specified algorithm. If the AEAD algorithm does not have an identified tag that can be distinguished from the rest of the ciphertext, return 0. If the AEAD algorithm is not recognized, return 0. An implementation may return either 0 or a correct size for an AEAD algorithm that it recognizes, but does not support. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ab589ea3b86f2bfa18880459299c58f8a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_TLS12_PSK_TO_MS_MAX_PSK_LEN&#160;&#160;&#160;128</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>This macro returns the maximum length of the PSK supported by the TLS-1.2 PSK-to-MS key derivation.</p>
+<p>Quoting RFC 4279, Sect 5.3: TLS implementations supporting these ciphersuites MUST support arbitrary PSK identities up to 128 octets in length, and arbitrary PSKs up to 64 octets in length. Supporting longer identities and keys is RECOMMENDED.</p>
+<p>Therefore, no implementation should define a value smaller than 64 for <a class="el" href="crypto__sizes_8h.html#ab589ea3b86f2bfa18880459299c58f8a">PSA_ALG_TLS12_PSK_TO_MS_MAX_PSK_LEN</a>. </p>
+
+</div>
+</div>
+<a class="anchor" id="a61a246f3eac41989821d982e56fea6c1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">key_type, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">key_bits, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(<a class="code" href="group__crypto__types.html#ga0e1d8f241228e49c9cadadfb4579ef1a">PSA_KEY_TYPE_IS_RSA</a>(key_type) ?                                    \</div><div class="line">     PSA_BITS_TO_BYTES(key_bits) - PSA_RSA_MINIMUM_PADDING_SIZE(alg) :  \</div><div class="line">     0)</div><div class="ttc" id="group__crypto__types_html_ga0e1d8f241228e49c9cadadfb4579ef1a"><div class="ttname"><a href="group__crypto__types.html#ga0e1d8f241228e49c9cadadfb4579ef1a">PSA_KEY_TYPE_IS_RSA</a></div><div class="ttdeci">#define PSA_KEY_TYPE_IS_RSA(type)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:424</div></div>
+</div><!-- fragment --><p>Safe output buffer size for <a class="el" href="group__asymmetric.html#ga34b55fbaee23dba1a677186fc66a556e" title="Decrypt a short message with a private key. ">psa_asymmetric_decrypt()</a>.</p>
+<p>This macro returns a safe buffer size for a ciphertext produced using a key of the specified type and size, with the specified algorithm. Note that the actual size of the ciphertext may be smaller, depending on the algorithm.</p>
+<dl class="section warning"><dt>Warning</dt><dd>This function may call its arguments multiple times or zero times, so you should not pass arguments that contain side effects.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">key_type</td><td>An asymmetric key type (this may indifferently be a key pair type or a public key type). </td></tr>
+    <tr><td class="paramname">key_bits</td><td>The size of the key in bits. </td></tr>
+    <tr><td class="paramname">alg</td><td>The signature algorithm.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>If the parameters are valid and supported, return a buffer size in bytes that guarantees that <a class="el" href="group__asymmetric.html#ga34b55fbaee23dba1a677186fc66a556e" title="Decrypt a short message with a private key. ">psa_asymmetric_decrypt()</a> will not fail with <a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a>. If the parameters are a valid combination that is not supported by the implementation, this macro either shall return either a sensible size or 0. If the parameters are not valid, the return value is unspecified. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a66ba3bd93e5ec52870ccc3848778bad8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">key_type, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">key_bits, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(<a class="code" href="group__crypto__types.html#ga0e1d8f241228e49c9cadadfb4579ef1a">PSA_KEY_TYPE_IS_RSA</a>(key_type) ?                                    \</div><div class="line">     ((void)alg, PSA_BITS_TO_BYTES(key_bits)) :                         \</div><div class="line">     0)</div><div class="ttc" id="group__crypto__types_html_ga0e1d8f241228e49c9cadadfb4579ef1a"><div class="ttname"><a href="group__crypto__types.html#ga0e1d8f241228e49c9cadadfb4579ef1a">PSA_KEY_TYPE_IS_RSA</a></div><div class="ttdeci">#define PSA_KEY_TYPE_IS_RSA(type)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:424</div></div>
+</div><!-- fragment --><p>Safe output buffer size for <a class="el" href="group__asymmetric.html#gad429293b7b0bf2a830b9540a02552004" title="Encrypt a short message with a public key. ">psa_asymmetric_encrypt()</a>.</p>
+<p>This macro returns a safe buffer size for a ciphertext produced using a key of the specified type and size, with the specified algorithm. Note that the actual size of the ciphertext may be smaller, depending on the algorithm.</p>
+<dl class="section warning"><dt>Warning</dt><dd>This function may call its arguments multiple times or zero times, so you should not pass arguments that contain side effects.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">key_type</td><td>An asymmetric key type (this may indifferently be a key pair type or a public key type). </td></tr>
+    <tr><td class="paramname">key_bits</td><td>The size of the key in bits. </td></tr>
+    <tr><td class="paramname">alg</td><td>The signature algorithm.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>If the parameters are valid and supported, return a buffer size in bytes that guarantees that <a class="el" href="group__asymmetric.html#gad429293b7b0bf2a830b9540a02552004" title="Encrypt a short message with a public key. ">psa_asymmetric_encrypt()</a> will not fail with <a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a>. If the parameters are a valid combination that is not supported by the implementation, this macro either shall return either a sensible size or 0. If the parameters are not valid, the return value is unspecified. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a77565b9b4fe6d8730fd2120f4c8378ab"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ASYMMETRIC_SIGN_OUTPUT_SIZE</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">key_type, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">key_bits, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(<a class="code" href="group__crypto__types.html#ga0e1d8f241228e49c9cadadfb4579ef1a">PSA_KEY_TYPE_IS_RSA</a>(key_type) ? ((void)alg, PSA_BITS_TO_BYTES(key_bits)) : \</div><div class="line">     <a class="code" href="group__crypto__types.html#ga88e01fa06b585654689a99bcc06bbe66">PSA_KEY_TYPE_IS_ECC</a>(key_type) ? <a class="code" href="crypto__sizes_8h.html#a10c472a35f04051add6b20cc228ffc11">PSA_ECDSA_SIGNATURE_SIZE</a>(key_bits) : \</div><div class="line">     ((void)alg, 0))</div><div class="ttc" id="group__crypto__types_html_ga0e1d8f241228e49c9cadadfb4579ef1a"><div class="ttname"><a href="group__crypto__types.html#ga0e1d8f241228e49c9cadadfb4579ef1a">PSA_KEY_TYPE_IS_RSA</a></div><div class="ttdeci">#define PSA_KEY_TYPE_IS_RSA(type)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:424</div></div>
+<div class="ttc" id="crypto__sizes_8h_html_a10c472a35f04051add6b20cc228ffc11"><div class="ttname"><a href="crypto__sizes_8h.html#a10c472a35f04051add6b20cc228ffc11">PSA_ECDSA_SIGNATURE_SIZE</a></div><div class="ttdeci">#define PSA_ECDSA_SIGNATURE_SIZE(curve_bits)</div><div class="ttdoc">ECDSA signature size for a given curve bit size. </div><div class="ttdef"><b>Definition:</b> crypto_sizes.h:329</div></div>
+<div class="ttc" id="group__crypto__types_html_ga88e01fa06b585654689a99bcc06bbe66"><div class="ttname"><a href="group__crypto__types.html#ga88e01fa06b585654689a99bcc06bbe66">PSA_KEY_TYPE_IS_ECC</a></div><div class="ttdeci">#define PSA_KEY_TYPE_IS_ECC(type)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:446</div></div>
+</div><!-- fragment --><p>Safe signature buffer size for <a class="el" href="group__asymmetric.html#ga1b0db9d345b5048cdd39357ac2d56c07" title="Sign a hash or short message with a private key. ">psa_asymmetric_sign()</a>.</p>
+<p>This macro returns a safe buffer size for a signature using a key of the specified type and size, with the specified algorithm. Note that the actual size of the signature may be smaller (some algorithms produce a variable-size signature).</p>
+<dl class="section warning"><dt>Warning</dt><dd>This function may call its arguments multiple times or zero times, so you should not pass arguments that contain side effects.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">key_type</td><td>An asymmetric key type (this may indifferently be a key pair type or a public key type). </td></tr>
+    <tr><td class="paramname">key_bits</td><td>The size of the key in bits. </td></tr>
+    <tr><td class="paramname">alg</td><td>The signature algorithm.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>If the parameters are valid and supported, return a buffer size in bytes that guarantees that <a class="el" href="group__asymmetric.html#ga1b0db9d345b5048cdd39357ac2d56c07" title="Sign a hash or short message with a private key. ">psa_asymmetric_sign()</a> will not fail with <a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a>. If the parameters are a valid combination that is not supported by the implementation, this macro either shall return either a sensible size or 0. If the parameters are not valid, the return value is unspecified. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ad755101764dba14589e5919ee41be7ca"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ASYMMETRIC_SIGNATURE_MAX_SIZE</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">PSA_BITS_TO_BYTES(                                                  \</div><div class="line">        PSA_VENDOR_RSA_MAX_KEY_BITS &gt; PSA_VENDOR_ECC_MAX_CURVE_BITS ?   \</div><div class="line">        PSA_VENDOR_RSA_MAX_KEY_BITS :                                   \</div><div class="line">        PSA_VENDOR_ECC_MAX_CURVE_BITS                                   \</div><div class="line">        )</div></div><!-- fragment --><p>Maximum size of an asymmetric signature.</p>
+<p>This macro must expand to a compile-time constant integer. This value should be the maximum size of a MAC supported by the implementation, in bytes, and must be no smaller than this maximum. </p>
+
+</div>
+</div>
+<a class="anchor" id="a10c472a35f04051add6b20cc228ffc11"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ECDSA_SIGNATURE_SIZE</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">curve_bits</td><td>)</td>
+          <td>&#160;&#160;&#160;(PSA_BITS_TO_BYTES(curve_bits) * 2)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>ECDSA signature size for a given curve bit size. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">curve_bits</td><td>Curve size in bits. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Signature size in bytes.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This macro returns a compile-time constant if its argument is one. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a6ce1014efbbc0bcca286ef7f9a72cb29"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_HASH_MAX_SIZE&#160;&#160;&#160;64</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Maximum size of a hash.</p>
+<p>This macro must expand to a compile-time constant integer. This value should be the maximum size of a hash supported by the implementation, in bytes, and must be no smaller than this maximum. </p>
+
+</div>
+</div>
+<a class="anchor" id="aef340331ce3cba2b57e1fc5624bf1f99"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_HASH_SIZE</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(                                                           \</div><div class="line">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD2 ? 16 :            \</div><div class="line">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD4 ? 16 :            \</div><div class="line">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD5 ? 16 :            \</div><div class="line">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_RIPEMD160 ? 20 :      \</div><div class="line">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_1 ? 20 :          \</div><div class="line">        PSA_ALG_HMAC_GET_HASH(alg) == <a class="code" href="group__crypto__types.html#ga25d6a3244d10a7148fe6b026d1979f7b">PSA_ALG_SHA_224</a> ? 28 :        \</div><div class="line">        PSA_ALG_HMAC_GET_HASH(alg) == <a class="code" href="group__crypto__types.html#ga619471f978e13cdd0a1e37145e4bf341">PSA_ALG_SHA_256</a> ? 32 :        \</div><div class="line">        PSA_ALG_HMAC_GET_HASH(alg) == <a class="code" href="group__crypto__types.html#ga58af64dd9a86a287e8da9ed7739eead4">PSA_ALG_SHA_384</a> ? 48 :        \</div><div class="line">        PSA_ALG_HMAC_GET_HASH(alg) == <a class="code" href="group__crypto__types.html#gafba3ae409f46d3dd7f37a0910660c3e9">PSA_ALG_SHA_512</a> ? 64 :        \</div><div class="line">        PSA_ALG_HMAC_GET_HASH(alg) == <a class="code" href="group__crypto__types.html#ga3fe2d7c3c80e3186ca78d16a35d5d931">PSA_ALG_SHA_512_224</a> ? 28 :    \</div><div class="line">        PSA_ALG_HMAC_GET_HASH(alg) == <a class="code" href="group__crypto__types.html#ga5910b3964c14e9613e8643a45b09c2d4">PSA_ALG_SHA_512_256</a> ? 32 :    \</div><div class="line">        PSA_ALG_HMAC_GET_HASH(alg) == <a class="code" href="group__crypto__types.html#ga16f5fe34ccce68c2fada1224c054a999">PSA_ALG_SHA3_224</a> ? 28 :       \</div><div class="line">        PSA_ALG_HMAC_GET_HASH(alg) == <a class="code" href="group__crypto__types.html#gaace70d9515489bbe3c5e7ac1b7d9155b">PSA_ALG_SHA3_256</a> ? 32 :       \</div><div class="line">        PSA_ALG_HMAC_GET_HASH(alg) == <a class="code" href="group__crypto__types.html#gab0f079257ea75e2acfe2fc3b38c78cd8">PSA_ALG_SHA3_384</a> ? 48 :       \</div><div class="line">        PSA_ALG_HMAC_GET_HASH(alg) == <a class="code" href="group__crypto__types.html#ga37e5dbe936dddb155e76f2997de27188">PSA_ALG_SHA3_512</a> ? 64 :       \</div><div class="line">        0)</div><div class="ttc" id="group__crypto__types_html_gaace70d9515489bbe3c5e7ac1b7d9155b"><div class="ttname"><a href="group__crypto__types.html#gaace70d9515489bbe3c5e7ac1b7d9155b">PSA_ALG_SHA3_256</a></div><div class="ttdeci">#define PSA_ALG_SHA3_256</div><div class="ttdef"><b>Definition:</b> crypto_values.h:673</div></div>
+<div class="ttc" id="group__crypto__types_html_ga16f5fe34ccce68c2fada1224c054a999"><div class="ttname"><a href="group__crypto__types.html#ga16f5fe34ccce68c2fada1224c054a999">PSA_ALG_SHA3_224</a></div><div class="ttdeci">#define PSA_ALG_SHA3_224</div><div class="ttdef"><b>Definition:</b> crypto_values.h:671</div></div>
+<div class="ttc" id="group__crypto__types_html_ga37e5dbe936dddb155e76f2997de27188"><div class="ttname"><a href="group__crypto__types.html#ga37e5dbe936dddb155e76f2997de27188">PSA_ALG_SHA3_512</a></div><div class="ttdeci">#define PSA_ALG_SHA3_512</div><div class="ttdef"><b>Definition:</b> crypto_values.h:677</div></div>
+<div class="ttc" id="group__crypto__types_html_ga619471f978e13cdd0a1e37145e4bf341"><div class="ttname"><a href="group__crypto__types.html#ga619471f978e13cdd0a1e37145e4bf341">PSA_ALG_SHA_256</a></div><div class="ttdeci">#define PSA_ALG_SHA_256</div><div class="ttdef"><b>Definition:</b> crypto_values.h:661</div></div>
+<div class="ttc" id="group__crypto__types_html_gafba3ae409f46d3dd7f37a0910660c3e9"><div class="ttname"><a href="group__crypto__types.html#gafba3ae409f46d3dd7f37a0910660c3e9">PSA_ALG_SHA_512</a></div><div class="ttdeci">#define PSA_ALG_SHA_512</div><div class="ttdef"><b>Definition:</b> crypto_values.h:665</div></div>
+<div class="ttc" id="group__crypto__types_html_ga25d6a3244d10a7148fe6b026d1979f7b"><div class="ttname"><a href="group__crypto__types.html#ga25d6a3244d10a7148fe6b026d1979f7b">PSA_ALG_SHA_224</a></div><div class="ttdeci">#define PSA_ALG_SHA_224</div><div class="ttdef"><b>Definition:</b> crypto_values.h:659</div></div>
+<div class="ttc" id="group__crypto__types_html_ga58af64dd9a86a287e8da9ed7739eead4"><div class="ttname"><a href="group__crypto__types.html#ga58af64dd9a86a287e8da9ed7739eead4">PSA_ALG_SHA_384</a></div><div class="ttdeci">#define PSA_ALG_SHA_384</div><div class="ttdef"><b>Definition:</b> crypto_values.h:663</div></div>
+<div class="ttc" id="group__crypto__types_html_ga3fe2d7c3c80e3186ca78d16a35d5d931"><div class="ttname"><a href="group__crypto__types.html#ga3fe2d7c3c80e3186ca78d16a35d5d931">PSA_ALG_SHA_512_224</a></div><div class="ttdeci">#define PSA_ALG_SHA_512_224</div><div class="ttdef"><b>Definition:</b> crypto_values.h:667</div></div>
+<div class="ttc" id="group__crypto__types_html_ga5910b3964c14e9613e8643a45b09c2d4"><div class="ttname"><a href="group__crypto__types.html#ga5910b3964c14e9613e8643a45b09c2d4">PSA_ALG_SHA_512_256</a></div><div class="ttdeci">#define PSA_ALG_SHA_512_256</div><div class="ttdef"><b>Definition:</b> crypto_values.h:669</div></div>
+<div class="ttc" id="group__crypto__types_html_gab0f079257ea75e2acfe2fc3b38c78cd8"><div class="ttname"><a href="group__crypto__types.html#gab0f079257ea75e2acfe2fc3b38c78cd8">PSA_ALG_SHA3_384</a></div><div class="ttdeci">#define PSA_ALG_SHA3_384</div><div class="ttdef"><b>Definition:</b> crypto_values.h:675</div></div>
+</div><!-- fragment --><p>The size of the output of <a class="el" href="group__hash.html#ga4795fd06a0067b0adcd92e9627b8c97e">psa_hash_finish()</a>, in bytes.</p>
+<p>This is also the hash size that <a class="el" href="group__hash.html#ga7be923c5700c9c70ef77ee9b76d1a5c0">psa_hash_verify()</a> expects.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>A hash algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">PSA_ALG_IS_HASH</a>(<code>alg</code>) is true), or an HMAC algorithm (<a class="el" href="group__crypto__types.html#ga70f397425684b3efcde1e0e34c28261f">PSA_ALG_HMAC</a>(<code>hash_alg</code>) where <code>hash_alg</code> is a hash algorithm).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The hash size for the specified hash algorithm. If the hash algorithm is not recognized, return 0. An implementation may return either 0 or the correct size for a hash algorithm that it recognizes, but does not support. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a0aae885cc8ff92e00fb5248420b939c3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_EXPORT_MAX_SIZE</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">key_type, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">key_bits&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(<a class="code" href="group__crypto__types.html#gaef86ce4e810e1c2c76068ac874bfef54">PSA_KEY_TYPE_IS_UNSTRUCTURED</a>(key_type) ? PSA_BITS_TO_BYTES(key_bits) : \</div><div class="line">     (key_type) == <a class="code" href="group__crypto__types.html#ga581f50687f5d650456925278948f2799">PSA_KEY_TYPE_RSA_KEYPAIR</a> ? PSA_KEY_EXPORT_RSA_KEYPAIR_MAX_SIZE(key_bits) : \</div><div class="line">     (key_type) == <a class="code" href="group__crypto__types.html#ga9ba0878f56c8bcd1995ac017a74f513b">PSA_KEY_TYPE_RSA_PUBLIC_KEY</a> ? PSA_KEY_EXPORT_RSA_PUBLIC_KEY_MAX_SIZE(key_bits) : \</div><div class="line">     (key_type) == <a class="code" href="group__crypto__types.html#ga011010ee28c20388f3d89fb27088ed62">PSA_KEY_TYPE_DSA_KEYPAIR</a> ? PSA_KEY_EXPORT_DSA_KEYPAIR_MAX_SIZE(key_bits) : \</div><div class="line">     (key_type) == <a class="code" href="group__crypto__types.html#ga5e7439c2905136366c3a876e62e5ddfc">PSA_KEY_TYPE_DSA_PUBLIC_KEY</a> ? PSA_KEY_EXPORT_DSA_PUBLIC_KEY_MAX_SIZE(key_bits) : \</div><div class="line">     <a class="code" href="group__crypto__types.html#ga7bf101b671e8cf26f4cb08fcb679db4b">PSA_KEY_TYPE_IS_ECC_KEYPAIR</a>(key_type) ? PSA_KEY_EXPORT_ECC_KEYPAIR_MAX_SIZE(key_bits) : \</div><div class="line">     <a class="code" href="group__crypto__types.html#ga5af146a173b0c84d7e737e2fb6a3c0a7">PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY</a>(key_type) ? PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_bits) : \</div><div class="line">     0)</div><div class="ttc" id="group__crypto__types_html_ga5e7439c2905136366c3a876e62e5ddfc"><div class="ttname"><a href="group__crypto__types.html#ga5e7439c2905136366c3a876e62e5ddfc">PSA_KEY_TYPE_DSA_PUBLIC_KEY</a></div><div class="ttdeci">#define PSA_KEY_TYPE_DSA_PUBLIC_KEY</div><div class="ttdef"><b>Definition:</b> crypto_values.h:428</div></div>
+<div class="ttc" id="group__crypto__types_html_ga581f50687f5d650456925278948f2799"><div class="ttname"><a href="group__crypto__types.html#ga581f50687f5d650456925278948f2799">PSA_KEY_TYPE_RSA_KEYPAIR</a></div><div class="ttdeci">#define PSA_KEY_TYPE_RSA_KEYPAIR</div><div class="ttdef"><b>Definition:</b> crypto_values.h:422</div></div>
+<div class="ttc" id="group__crypto__types_html_gaef86ce4e810e1c2c76068ac874bfef54"><div class="ttname"><a href="group__crypto__types.html#gaef86ce4e810e1c2c76068ac874bfef54">PSA_KEY_TYPE_IS_UNSTRUCTURED</a></div><div class="ttdeci">#define PSA_KEY_TYPE_IS_UNSTRUCTURED(type)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:327</div></div>
+<div class="ttc" id="group__crypto__types_html_ga9ba0878f56c8bcd1995ac017a74f513b"><div class="ttname"><a href="group__crypto__types.html#ga9ba0878f56c8bcd1995ac017a74f513b">PSA_KEY_TYPE_RSA_PUBLIC_KEY</a></div><div class="ttdeci">#define PSA_KEY_TYPE_RSA_PUBLIC_KEY</div><div class="ttdef"><b>Definition:</b> crypto_values.h:420</div></div>
+<div class="ttc" id="group__crypto__types_html_ga011010ee28c20388f3d89fb27088ed62"><div class="ttname"><a href="group__crypto__types.html#ga011010ee28c20388f3d89fb27088ed62">PSA_KEY_TYPE_DSA_KEYPAIR</a></div><div class="ttdeci">#define PSA_KEY_TYPE_DSA_KEYPAIR</div><div class="ttdef"><b>Definition:</b> crypto_values.h:430</div></div>
+<div class="ttc" id="group__crypto__types_html_ga5af146a173b0c84d7e737e2fb6a3c0a7"><div class="ttname"><a href="group__crypto__types.html#ga5af146a173b0c84d7e737e2fb6a3c0a7">PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY</a></div><div class="ttdeci">#define PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY(type)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:454</div></div>
+<div class="ttc" id="group__crypto__types_html_ga7bf101b671e8cf26f4cb08fcb679db4b"><div class="ttname"><a href="group__crypto__types.html#ga7bf101b671e8cf26f4cb08fcb679db4b">PSA_KEY_TYPE_IS_ECC_KEYPAIR</a></div><div class="ttdeci">#define PSA_KEY_TYPE_IS_ECC_KEYPAIR(type)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:450</div></div>
+</div><!-- fragment --><p>Safe output buffer size for <a class="el" href="group__import__export.html#ga902b9a7a6cf34d6111668be777b05eaf" title="Export a key in binary format. ">psa_export_key()</a> or <a class="el" href="group__import__export.html#gad760d1f0d4e60972c78cbb4c8a528256" title="Export a public key or the public part of a key pair in binary format. ">psa_export_public_key()</a>.</p>
+<p>This macro returns a compile-time constant if its arguments are compile-time constants.</p>
+<dl class="section warning"><dt>Warning</dt><dd>This function may call its arguments multiple times or zero times, so you should not pass arguments that contain side effects.</dd></dl>
+<p>The following code illustrates how to allocate enough memory to export a key by querying the key type and size at runtime. </p><div class="fragment"><div class="line"><a class="code" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> key_type;</div><div class="line"><span class="keywordtype">size_t</span> key_bits;</div><div class="line"><a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> status;</div><div class="line">status = <a class="code" href="group__import__export.html#gae8939902d6977ea8ad13eb7b4db9a042">psa_get_key_information</a>(key, &amp;key_type, &amp;key_bits);</div><div class="line"><span class="keywordflow">if</span> (status != <a class="code" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a>) handle_error(...);</div><div class="line"><span class="keywordtype">size_t</span> buffer_size = <a class="code" href="crypto__sizes_8h.html#a0aae885cc8ff92e00fb5248420b939c3">PSA_KEY_EXPORT_MAX_SIZE</a>(key_type, key_bits);</div><div class="line"><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buffer = malloc(buffer_size);</div><div class="line"><span class="keywordflow">if</span> (buffer != NULL) handle_error(...);</div><div class="line"><span class="keywordtype">size_t</span> buffer_length;</div><div class="line">status = <a class="code" href="group__import__export.html#ga902b9a7a6cf34d6111668be777b05eaf">psa_export_key</a>(key, buffer, buffer_size, &amp;buffer_length);</div><div class="line"><span class="keywordflow">if</span> (status != <a class="code" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a>) handle_error(...);</div></div><!-- fragment --><p>For <a class="el" href="group__import__export.html#gad760d1f0d4e60972c78cbb4c8a528256" title="Export a public key or the public part of a key pair in binary format. ">psa_export_public_key()</a>, calculate the buffer size from the public key type. You can use the macro <a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a> to convert a key pair type to the corresponding public key type. </p><div class="fragment"><div class="line"><a class="code" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> key_type;</div><div class="line"><span class="keywordtype">size_t</span> key_bits;</div><div class="line"><a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> status;</div><div class="line">status = <a class="code" href="group__import__export.html#gae8939902d6977ea8ad13eb7b4db9a042">psa_get_key_information</a>(key, &amp;key_type, &amp;key_bits);</div><div class="line"><span class="keywordflow">if</span> (status != <a class="code" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a>) handle_error(...);</div><div class="line"><a class="code" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> public_key_type = <a class="code" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a>(key_type);</div><div class="line"><span class="keywordtype">size_t</span> buffer_size = <a class="code" href="crypto__sizes_8h.html#a0aae885cc8ff92e00fb5248420b939c3">PSA_KEY_EXPORT_MAX_SIZE</a>(public_key_type, key_bits);</div><div class="line"><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buffer = malloc(buffer_size);</div><div class="line"><span class="keywordflow">if</span> (buffer != NULL) handle_error(...);</div><div class="line"><span class="keywordtype">size_t</span> buffer_length;</div><div class="line">status = <a class="code" href="group__import__export.html#gad760d1f0d4e60972c78cbb4c8a528256">psa_export_public_key</a>(key, buffer, buffer_size, &amp;buffer_length);</div><div class="line"><span class="keywordflow">if</span> (status != <a class="code" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a>) handle_error(...);</div></div><!-- fragment --><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">key_type</td><td>A supported key type. </td></tr>
+    <tr><td class="paramname">key_bits</td><td>The size of the key in bits.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>If the parameters are valid and supported, return a buffer size in bytes that guarantees that <a class="el" href="group__asymmetric.html#ga1b0db9d345b5048cdd39357ac2d56c07" title="Sign a hash or short message with a private key. ">psa_asymmetric_sign()</a> will not fail with <a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a>. If the parameters are a valid combination that is not supported by the implementation, this macro either shall return either a sensible size or 0. If the parameters are not valid, the return value is unspecified. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aa84c5fb384ac7cb1bfc52adde96588ee"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_MAC_FINAL_SIZE</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">key_type, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">key_bits, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">((alg) &amp; PSA_ALG_MAC_TRUNCATION_MASK ? <a class="code" href="group__crypto__types.html#gab03726c4476174e019a08e2a04018ce8">PSA_MAC_TRUNCATED_LENGTH</a>(alg) : <a class="code" href="group__crypto__types.html#ga4a050c3c3cbc6eb96418f18847601c8a">\</a></div><div class="line"><a class="code" href="group__crypto__types.html#ga4a050c3c3cbc6eb96418f18847601c8a">     PSA_ALG_IS_HMAC</a>(alg) ? <a class="code" href="crypto__sizes_8h.html#aef340331ce3cba2b57e1fc5624bf1f99">PSA_HASH_SIZE</a>(PSA_ALG_HMAC_GET_HASH(alg)) : \</div><div class="line">     <a class="code" href="group__crypto__types.html#gae49d1eb601125d65a5c5b252aa45479e">PSA_ALG_IS_BLOCK_CIPHER_MAC</a>(alg) ? <a class="code" href="group__crypto__types.html#gacaa366bdeb0413e63e87a667c5457b2e">PSA_BLOCK_CIPHER_BLOCK_SIZE</a>(key_type) : \</div><div class="line">     ((void)(key_type), (void)(key_bits), 0))</div><div class="ttc" id="crypto__sizes_8h_html_aef340331ce3cba2b57e1fc5624bf1f99"><div class="ttname"><a href="crypto__sizes_8h.html#aef340331ce3cba2b57e1fc5624bf1f99">PSA_HASH_SIZE</a></div><div class="ttdeci">#define PSA_HASH_SIZE(alg)</div><div class="ttdef"><b>Definition:</b> crypto_sizes.h:70</div></div>
+<div class="ttc" id="group__crypto__types_html_gae49d1eb601125d65a5c5b252aa45479e"><div class="ttname"><a href="group__crypto__types.html#gae49d1eb601125d65a5c5b252aa45479e">PSA_ALG_IS_BLOCK_CIPHER_MAC</a></div><div class="ttdeci">#define PSA_ALG_IS_BLOCK_CIPHER_MAC(alg)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:836</div></div>
+<div class="ttc" id="group__crypto__types_html_gacaa366bdeb0413e63e87a667c5457b2e"><div class="ttname"><a href="group__crypto__types.html#gacaa366bdeb0413e63e87a667c5457b2e">PSA_BLOCK_CIPHER_BLOCK_SIZE</a></div><div class="ttdeci">#define PSA_BLOCK_CIPHER_BLOCK_SIZE(type)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:527</div></div>
+<div class="ttc" id="group__crypto__types_html_gab03726c4476174e019a08e2a04018ce8"><div class="ttname"><a href="group__crypto__types.html#gab03726c4476174e019a08e2a04018ce8">PSA_MAC_TRUNCATED_LENGTH</a></div><div class="ttdeci">#define PSA_MAC_TRUNCATED_LENGTH(alg)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:820</div></div>
+<div class="ttc" id="group__crypto__types_html_ga4a050c3c3cbc6eb96418f18847601c8a"><div class="ttname"><a href="group__crypto__types.html#ga4a050c3c3cbc6eb96418f18847601c8a">PSA_ALG_IS_HMAC</a></div><div class="ttdeci">#define PSA_ALG_IS_HMAC(alg)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:743</div></div>
+</div><!-- fragment --><p>The size of the output of <a class="el" href="group__MAC.html#gac22bc0125580c96724a09226cfbc97f2">psa_mac_sign_finish()</a>, in bytes.</p>
+<p>This is also the MAC size that <a class="el" href="group__MAC.html#gac92b2930d6728e1be4d011c05d485822">psa_mac_verify_finish()</a> expects.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">key_type</td><td>The type of the MAC key. </td></tr>
+    <tr><td class="paramname">key_bits</td><td>The size of the MAC key in bits. </td></tr>
+    <tr><td class="paramname">alg</td><td>A MAC algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gaca7aee4c9dde316b3b1a150a26eab776">PSA_ALG_IS_MAC(alg)</a> is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The MAC size for the specified algorithm with the specified key parameters. </dd>
+<dd>
+0 if the MAC algorithm is not recognized. </dd>
+<dd>
+Either 0 or the correct size for a MAC algorithm that the implementation recognizes, but does not support. </dd>
+<dd>
+Unspecified if the key parameters are not consistent with the algorithm. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a4681cc4f6226883a2160122c562ca682"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_MAC_MAX_SIZE&#160;&#160;&#160;<a class="el" href="crypto__sizes_8h.html#a6ce1014efbbc0bcca286ef7f9a72cb29">PSA_HASH_MAX_SIZE</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Maximum size of a MAC.</p>
+<p>This macro must expand to a compile-time constant integer. This value should be the maximum size of a MAC supported by the implementation, in bytes, and must be no smaller than this maximum. </p>
+
+</div>
+</div>
+<a class="anchor" id="aa3cfcff0291d6da279fec8fe834d5dec"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_MAX_BLOCK_CIPHER_BLOCK_SIZE&#160;&#160;&#160;16</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The maximum size of a block cipher supported by the implementation. </p>
+
+</div>
+</div>
+<a class="anchor" id="aec0bcba60e7514b83f967b171d494ed3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_RSA_MINIMUM_PADDING_SIZE</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(PSA_ALG_IS_RSA_OAEP(alg) ?                                         \</div><div class="line">     2 * PSA_HASH_FINAL_SIZE(PSA_ALG_RSA_OAEP_GET_HASH(alg)) + 1 :      \</div><div class="line">     11 <span class="comment">/*PKCS#1v1.5*/</span>)</div></div><!-- fragment -->
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/crypto__sizes_8h__dep__incl.map b/docs/html/crypto__sizes_8h__dep__incl.map
new file mode 100644
index 0000000..549dc4c
--- /dev/null
+++ b/docs/html/crypto__sizes_8h__dep__incl.map
@@ -0,0 +1,3 @@
+<map id="psa/crypto_sizes.h" name="psa/crypto_sizes.h">
+<area shape="rect" id="node2" href="$crypto_8h.html" title="Platform Security Architecture cryptography module. " alt="" coords="24,80,119,107"/>
+</map>
diff --git a/docs/html/crypto__sizes_8h__dep__incl.md5 b/docs/html/crypto__sizes_8h__dep__incl.md5
new file mode 100644
index 0000000..b4da281
--- /dev/null
+++ b/docs/html/crypto__sizes_8h__dep__incl.md5
@@ -0,0 +1 @@
+e32c7361c89b531f3dc3224bf18e2d1e
\ No newline at end of file
diff --git a/docs/html/crypto__sizes_8h__dep__incl.png b/docs/html/crypto__sizes_8h__dep__incl.png
new file mode 100644
index 0000000..be24f96
--- /dev/null
+++ b/docs/html/crypto__sizes_8h__dep__incl.png
Binary files differ
diff --git a/docs/html/crypto__sizes_8h__incl.map b/docs/html/crypto__sizes_8h__incl.map
new file mode 100644
index 0000000..8e2ba95
--- /dev/null
+++ b/docs/html/crypto__sizes_8h__incl.map
@@ -0,0 +1,2 @@
+<map id="psa/crypto_sizes.h" name="psa/crypto_sizes.h">
+</map>
diff --git a/docs/html/crypto__sizes_8h__incl.md5 b/docs/html/crypto__sizes_8h__incl.md5
new file mode 100644
index 0000000..e3dab45
--- /dev/null
+++ b/docs/html/crypto__sizes_8h__incl.md5
@@ -0,0 +1 @@
+e658bed16c33e403901c0821826db5a9
\ No newline at end of file
diff --git a/docs/html/crypto__sizes_8h__incl.png b/docs/html/crypto__sizes_8h__incl.png
new file mode 100644
index 0000000..f38fc21
--- /dev/null
+++ b/docs/html/crypto__sizes_8h__incl.png
Binary files differ
diff --git a/docs/html/crypto__sizes_8h_source.html b/docs/html/crypto__sizes_8h_source.html
new file mode 100644
index 0000000..2b365ec
--- /dev/null
+++ b/docs/html/crypto__sizes_8h_source.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: psa/crypto_sizes.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_7dae9cfde651cd3cb034485ce5e391b9.html">psa</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">crypto_sizes.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="crypto__sizes_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> *  Copyright (C) 2018, ARM Limited, All Rights Reserved</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> *  SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> *  Licensed under the Apache License, Version 2.0 (the &quot;License&quot;); you may</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment"> *  not use this file except in compliance with the License.</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"> *  You may obtain a copy of the License at</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment"> *  http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment"> *  Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment"> *  distributed under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment"> *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment"> *  See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment"> *  limitations under the License.</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment"> *  This file is part of mbed TLS (https://tls.mbed.org)</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="preprocessor">#ifndef PSA_CRYPTO_SIZES_H</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="preprocessor">#define PSA_CRYPTO_SIZES_H</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment">/* Include the Mbed TLS configuration file, the way Mbed TLS does it</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment"> * in each of its header files. */</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">#if !defined(MBEDTLS_CONFIG_FILE)</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">#include &quot;../mbedtls/config.h&quot;</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">#include MBEDTLS_CONFIG_FILE</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="preprocessor">#define PSA_BITS_TO_BYTES(bits) (((bits) + 7) / 8)</span></div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="preprocessor">#define PSA_BYTES_TO_BITS(bytes) ((bytes) * 8)</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="crypto__sizes_8h.html#aef340331ce3cba2b57e1fc5624bf1f99">   70</a></span>&#160;<span class="preprocessor">#define PSA_HASH_SIZE(alg)                                      \</span></div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="preprocessor">    (                                                           \</span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="preprocessor">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD2 ? 16 :            \</span></div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="preprocessor">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD4 ? 16 :            \</span></div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="preprocessor">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD5 ? 16 :            \</span></div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="preprocessor">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_RIPEMD160 ? 20 :      \</span></div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="preprocessor">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_1 ? 20 :          \</span></div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="preprocessor">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_224 ? 28 :        \</span></div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="preprocessor">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_256 ? 32 :        \</span></div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;<span class="preprocessor">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_384 ? 48 :        \</span></div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;<span class="preprocessor">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512 ? 64 :        \</span></div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;<span class="preprocessor">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512_224 ? 28 :    \</span></div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;<span class="preprocessor">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512_256 ? 32 :    \</span></div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="preprocessor">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_224 ? 28 :       \</span></div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="preprocessor">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_256 ? 32 :       \</span></div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;<span class="preprocessor">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_384 ? 48 :       \</span></div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;<span class="preprocessor">        PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_512 ? 64 :       \</span></div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="preprocessor">        0)</span></div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="comment">/* Note: for HMAC-SHA-3, the block size is 144 bytes for HMAC-SHA3-226,</span></div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="comment"> * 136 bytes for HMAC-SHA3-256, 104 bytes for SHA3-384, 72 bytes for</span></div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;<span class="comment"> * HMAC-SHA3-512. */</span></div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;<span class="preprocessor">#if defined(MBEDTLS_SHA512_C)</span></div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="crypto__sizes_8h.html#a6ce1014efbbc0bcca286ef7f9a72cb29">  101</a></span>&#160;<span class="preprocessor">#define PSA_HASH_MAX_SIZE 64</span></div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;<span class="preprocessor">#define PSA_HMAC_MAX_HASH_BLOCK_SIZE 128</span></div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="preprocessor">#define PSA_HASH_MAX_SIZE 32</span></div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="preprocessor">#define PSA_HMAC_MAX_HASH_BLOCK_SIZE 64</span></div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;<span class="comment">/* All non-HMAC MACs have a maximum size that&#39;s smaller than the</span></div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;<span class="comment"> * minimum possible value of PSA_HASH_MAX_SIZE in this implementation. */</span></div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;<span class="comment">/* Note that the encoding of truncated MAC algorithms limits this value</span></div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;<span class="comment"> * to 64 bytes.</span></div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="crypto__sizes_8h.html#a4681cc4f6226883a2160122c562ca682">  121</a></span>&#160;<span class="preprocessor">#define PSA_MAC_MAX_SIZE PSA_HASH_MAX_SIZE</span></div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;</div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="crypto__sizes_8h.html#a8e3079b2e624cb8d32b94843cddada49">  138</a></span>&#160;<span class="preprocessor">#define PSA_AEAD_TAG_LENGTH(alg)                                        \</span></div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;<span class="preprocessor">    (PSA_ALG_IS_AEAD(alg) ?                                             \</span></div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;<span class="preprocessor">     (((alg) &amp; PSA_ALG_AEAD_TAG_LENGTH_MASK) &gt;&gt; PSA_AEAD_TAG_LENGTH_OFFSET) : \</span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;<span class="preprocessor">     0)</span></div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;<span class="comment">/* The maximum size of an RSA key on this implementation, in bits.</span></div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;<span class="comment"> * This is a vendor-specific macro.</span></div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;<span class="comment"> * Mbed TLS does not set a hard limit on the size of RSA keys: any key</span></div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;<span class="comment"> * whose parameters fit in a bignum is accepted. However large keys can</span></div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;<span class="comment"> * induce a large memory usage and long computation times. Unlike other</span></div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;<span class="comment"> * auxiliary macros in this file and in crypto.h, which reflect how the</span></div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;<span class="comment"> * library is configured, this macro defines how the library is</span></div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;<span class="comment"> * configured. This implementation refuses to import or generate an</span></div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="comment"> * RSA key whose size is larger than the value defined here.</span></div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;<span class="comment"> * Note that an implementation may set different size limits for different</span></div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="comment"> * operations, and does not need to accept all key sizes up to the limit. */</span></div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;<span class="preprocessor">#define PSA_VENDOR_RSA_MAX_KEY_BITS 4096</span></div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;<span class="comment">/* The maximum size of an ECC key on this implementation, in bits.</span></div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;<span class="comment"> * This is a vendor-specific macro. */</span></div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="preprocessor">#if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED)</span></div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;<span class="preprocessor">#define PSA_VENDOR_ECC_MAX_CURVE_BITS 521</span></div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;<span class="preprocessor">#elif defined(MBEDTLS_ECP_DP_BP512R1_ENABLED)</span></div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<span class="preprocessor">#define PSA_VENDOR_ECC_MAX_CURVE_BITS 512</span></div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;<span class="preprocessor">#elif defined(MBEDTLS_ECP_DP_CURVE448_ENABLED)</span></div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;<span class="preprocessor">#define PSA_VENDOR_ECC_MAX_CURVE_BITS 448</span></div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;<span class="preprocessor">#elif defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED)</span></div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<span class="preprocessor">#define PSA_VENDOR_ECC_MAX_CURVE_BITS 384</span></div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;<span class="preprocessor">#elif defined(MBEDTLS_ECP_DP_BP384R1_ENABLED)</span></div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;<span class="preprocessor">#define PSA_VENDOR_ECC_MAX_CURVE_BITS 384</span></div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;<span class="preprocessor">#elif defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED)</span></div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;<span class="preprocessor">#define PSA_VENDOR_ECC_MAX_CURVE_BITS 256</span></div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;<span class="preprocessor">#elif defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED)</span></div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;<span class="preprocessor">#define PSA_VENDOR_ECC_MAX_CURVE_BITS 256</span></div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;<span class="preprocessor">#elif defined(MBEDTLS_ECP_DP_BP256R1_ENABLED)</span></div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="preprocessor">#define PSA_VENDOR_ECC_MAX_CURVE_BITS 256</span></div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;<span class="preprocessor">#elif defined(MBEDTLS_ECP_DP_CURVE25519_ENABLED)</span></div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;<span class="preprocessor">#define PSA_VENDOR_ECC_MAX_CURVE_BITS 255</span></div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;<span class="preprocessor">#elif defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED)</span></div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;<span class="preprocessor">#define PSA_VENDOR_ECC_MAX_CURVE_BITS 224</span></div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;<span class="preprocessor">#elif defined(MBEDTLS_ECP_DP_SECP224K1_ENABLED)</span></div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="preprocessor">#define PSA_VENDOR_ECC_MAX_CURVE_BITS 224</span></div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;<span class="preprocessor">#elif defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED)</span></div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;<span class="preprocessor">#define PSA_VENDOR_ECC_MAX_CURVE_BITS 192</span></div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;<span class="preprocessor">#elif defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED)</span></div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;<span class="preprocessor">#define PSA_VENDOR_ECC_MAX_CURVE_BITS 192</span></div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;<span class="preprocessor">#define PSA_VENDOR_ECC_MAX_CURVE_BITS 0</span></div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="crypto__sizes_8h.html#ab589ea3b86f2bfa18880459299c58f8a">  204</a></span>&#160;<span class="preprocessor">#define PSA_ALG_TLS12_PSK_TO_MS_MAX_PSK_LEN 128</span></div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;</div><div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="crypto__sizes_8h.html#ad755101764dba14589e5919ee41be7ca">  214</a></span>&#160;<span class="preprocessor">#define PSA_ASYMMETRIC_SIGNATURE_MAX_SIZE                               \</span></div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;<span class="preprocessor">    PSA_BITS_TO_BYTES(                                                  \</span></div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;<span class="preprocessor">        PSA_VENDOR_RSA_MAX_KEY_BITS &gt; PSA_VENDOR_ECC_MAX_CURVE_BITS ?   \</span></div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;<span class="preprocessor">        PSA_VENDOR_RSA_MAX_KEY_BITS :                                   \</span></div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;<span class="preprocessor">        PSA_VENDOR_ECC_MAX_CURVE_BITS                                   \</span></div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;<span class="preprocessor">        )</span></div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="crypto__sizes_8h.html#aa3cfcff0291d6da279fec8fe834d5dec">  222</a></span>&#160;<span class="preprocessor">#define PSA_MAX_BLOCK_CIPHER_BLOCK_SIZE 16</span></div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;</div><div class="line"><a name="l00241"></a><span class="lineno"><a class="line" href="crypto__sizes_8h.html#aa84c5fb384ac7cb1bfc52adde96588ee">  241</a></span>&#160;<span class="preprocessor">#define PSA_MAC_FINAL_SIZE(key_type, key_bits, alg)                     \</span></div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;<span class="preprocessor">    ((alg) &amp; PSA_ALG_MAC_TRUNCATION_MASK ? PSA_MAC_TRUNCATED_LENGTH(alg) : \</span></div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;<span class="preprocessor">     PSA_ALG_IS_HMAC(alg) ? PSA_HASH_SIZE(PSA_ALG_HMAC_GET_HASH(alg)) : \</span></div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;<span class="preprocessor">     PSA_ALG_IS_BLOCK_CIPHER_MAC(alg) ? PSA_BLOCK_CIPHER_BLOCK_SIZE(key_type) : \</span></div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;<span class="preprocessor">     ((void)(key_type), (void)(key_bits), 0))</span></div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;</div><div class="line"><a name="l00266"></a><span class="lineno"><a class="line" href="crypto__sizes_8h.html#a85667d47a7aa6c7b99a80e5273671266">  266</a></span>&#160;<span class="preprocessor">#define PSA_AEAD_ENCRYPT_OUTPUT_SIZE(alg, plaintext_length)       \</span></div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;<span class="preprocessor">    (PSA_AEAD_TAG_LENGTH(alg) != 0 ?                              \</span></div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;<span class="preprocessor">     (plaintext_length) + PSA_AEAD_TAG_LENGTH(alg) :              \</span></div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;<span class="preprocessor">     0)</span></div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;</div><div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="crypto__sizes_8h.html#af45d92c1d7ef43822b8df21ab1117d3f">  289</a></span>&#160;<span class="preprocessor">#define PSA_AEAD_FINISH_OUTPUT_SIZE(alg, plaintext_length)      \</span></div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;<span class="preprocessor">    ((size_t)0)</span></div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="crypto__sizes_8h.html#a1d057796166c16eb673ad1997e48a60b">  311</a></span>&#160;<span class="preprocessor">#define PSA_AEAD_DECRYPT_OUTPUT_SIZE(alg, ciphertext_length)      \</span></div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;<span class="preprocessor">    (PSA_AEAD_TAG_LENGTH(alg) != 0 ?                              \</span></div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;<span class="preprocessor">     (plaintext_length) - PSA_AEAD_TAG_LENGTH(alg) :              \</span></div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;<span class="preprocessor">     0)</span></div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;<span class="preprocessor">#define PSA_RSA_MINIMUM_PADDING_SIZE(alg)                               \</span></div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;<span class="preprocessor">    (PSA_ALG_IS_RSA_OAEP(alg) ?                                         \</span></div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;<span class="preprocessor">     2 * PSA_HASH_FINAL_SIZE(PSA_ALG_RSA_OAEP_GET_HASH(alg)) + 1 :      \</span></div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;<span class="preprocessor">     11 </span><span class="comment">/*PKCS#1v1.5*/</span><span class="preprocessor">)</span></div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;</div><div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="crypto__sizes_8h.html#a10c472a35f04051add6b20cc228ffc11">  329</a></span>&#160;<span class="preprocessor">#define PSA_ECDSA_SIGNATURE_SIZE(curve_bits)    \</span></div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;<span class="preprocessor">    (PSA_BITS_TO_BYTES(curve_bits) * 2)</span></div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;</div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="crypto__sizes_8h.html#a77565b9b4fe6d8730fd2120f4c8378ab">  358</a></span>&#160;<span class="preprocessor">#define PSA_ASYMMETRIC_SIGN_OUTPUT_SIZE(key_type, key_bits, alg)        \</span></div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;<span class="preprocessor">    (PSA_KEY_TYPE_IS_RSA(key_type) ? ((void)alg, PSA_BITS_TO_BYTES(key_bits)) : \</span></div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;<span class="preprocessor">     PSA_KEY_TYPE_IS_ECC(key_type) ? PSA_ECDSA_SIGNATURE_SIZE(key_bits) : \</span></div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;<span class="preprocessor">     ((void)alg, 0))</span></div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;</div><div class="line"><a name="l00389"></a><span class="lineno"><a class="line" href="crypto__sizes_8h.html#a66ba3bd93e5ec52870ccc3848778bad8">  389</a></span>&#160;<span class="preprocessor">#define PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE(key_type, key_bits, alg)     \</span></div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;<span class="preprocessor">    (PSA_KEY_TYPE_IS_RSA(key_type) ?                                    \</span></div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;<span class="preprocessor">     ((void)alg, PSA_BITS_TO_BYTES(key_bits)) :                         \</span></div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;<span class="preprocessor">     0)</span></div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno"><a class="line" href="crypto__sizes_8h.html#a61a246f3eac41989821d982e56fea6c1">  420</a></span>&#160;<span class="preprocessor">#define PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE(key_type, key_bits, alg)     \</span></div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;<span class="preprocessor">    (PSA_KEY_TYPE_IS_RSA(key_type) ?                                    \</span></div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;<span class="preprocessor">     PSA_BITS_TO_BYTES(key_bits) - PSA_RSA_MINIMUM_PADDING_SIZE(alg) :  \</span></div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;<span class="preprocessor">     0)</span></div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;<span class="comment">/* Maximum size of the ASN.1 encoding of an INTEGER with the specified</span></div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;<span class="comment"> * number of bits.</span></div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;<span class="comment"> * This definition assumes that bits &lt;= 2^19 - 9 so that the length field</span></div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;<span class="comment"> * is at most 3 bytes. The length of the encoding is the length of the</span></div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;<span class="comment"> * bit string padded to a whole number of bytes plus:</span></div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;<span class="comment"> * - 1 type byte;</span></div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;<span class="comment"> * - 1 to 3 length bytes;</span></div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;<span class="comment"> * - 0 to 1 bytes of leading 0 due to the sign bit.</span></div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;<span class="preprocessor">#define PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE(bits)      \</span></div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;<span class="preprocessor">    ((bits) / 8 + 5)</span></div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;<span class="comment">/* Maximum size of the export encoding of an RSA public key.</span></div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;<span class="comment"> * Assumes that the public exponent is less than 2^32.</span></div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;<span class="comment"> * SubjectPublicKeyInfo  ::=  SEQUENCE  {</span></div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;<span class="comment"> *      algorithm            AlgorithmIdentifier,</span></div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;<span class="comment"> *      subjectPublicKey     BIT STRING  } -- contains RSAPublicKey</span></div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;<span class="comment"> * AlgorithmIdentifier  ::=  SEQUENCE  {</span></div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;<span class="comment"> *      algorithm               OBJECT IDENTIFIER,</span></div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;<span class="comment"> *      parameters              NULL  }</span></div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;<span class="comment"> * RSAPublicKey  ::=  SEQUENCE  {</span></div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;<span class="comment"> *    modulus            INTEGER,    -- n</span></div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;<span class="comment"> *    publicExponent     INTEGER  }  -- e</span></div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;<span class="comment"> * - 3 * 4 bytes of SEQUENCE overhead;</span></div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;<span class="comment"> * - 1 + 1 + 9 bytes of algorithm (RSA OID);</span></div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;<span class="comment"> * - 2 bytes of NULL;</span></div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;<span class="comment"> * - 4 bytes of BIT STRING overhead;</span></div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;<span class="comment"> * - n : INTEGER;</span></div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;<span class="comment"> * - 7 bytes for the public exponent.</span></div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;<span class="preprocessor">#define PSA_KEY_EXPORT_RSA_PUBLIC_KEY_MAX_SIZE(key_bits)        \</span></div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;<span class="preprocessor">    (PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE(key_bits) + 36)</span></div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;<span class="comment">/* Maximum size of the export encoding of an RSA key pair.</span></div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;<span class="comment"> * Assumes thatthe public exponent is less than 2^32 and that the size</span></div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;<span class="comment"> * difference between the two primes is at most 1 bit.</span></div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;<span class="comment"> * RSAPrivateKey ::= SEQUENCE {</span></div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;<span class="comment"> *     version           Version,  -- 0</span></div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;<span class="comment"> *     modulus           INTEGER,  -- N-bit</span></div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;<span class="comment"> *     publicExponent    INTEGER,  -- 32-bit</span></div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;<span class="comment"> *     privateExponent   INTEGER,  -- N-bit</span></div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;<span class="comment"> *     prime1            INTEGER,  -- N/2-bit</span></div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;<span class="comment"> *     prime2            INTEGER,  -- N/2-bit</span></div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;<span class="comment"> *     exponent1         INTEGER,  -- N/2-bit</span></div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;<span class="comment"> *     exponent2         INTEGER,  -- N/2-bit</span></div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;<span class="comment"> *     coefficient       INTEGER,  -- N/2-bit</span></div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;<span class="comment"> * }</span></div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;<span class="comment"> * - 4 bytes of SEQUENCE overhead;</span></div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;<span class="comment"> * - 3 bytes of version;</span></div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;<span class="comment"> * - 7 half-size INTEGERs plus 2 full-size INTEGERs,</span></div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;<span class="comment"> *   overapproximated as 9 half-size INTEGERS;</span></div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;<span class="comment"> * - 7 bytes for the public exponent.</span></div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;<span class="preprocessor">#define PSA_KEY_EXPORT_RSA_KEYPAIR_MAX_SIZE(key_bits)   \</span></div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;<span class="preprocessor">    (9 * PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE((key_bits) / 2 + 1) + 14)</span></div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;<span class="comment">/* Maximum size of the export encoding of a DSA public key.</span></div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;<span class="comment"> * SubjectPublicKeyInfo  ::=  SEQUENCE  {</span></div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;<span class="comment"> *      algorithm            AlgorithmIdentifier,</span></div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;<span class="comment"> *      subjectPublicKey     BIT STRING  } -- contains DSAPublicKey</span></div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;<span class="comment"> * AlgorithmIdentifier  ::=  SEQUENCE  {</span></div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;<span class="comment"> *      algorithm               OBJECT IDENTIFIER,</span></div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;<span class="comment"> *      parameters              Dss-Parms  } -- SEQUENCE of 3 INTEGERs</span></div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;<span class="comment"> * DSAPublicKey  ::=  INTEGER -- public key, Y</span></div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;<span class="comment"> * - 3 * 4 bytes of SEQUENCE overhead;</span></div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;<span class="comment"> * - 1 + 1 + 7 bytes of algorithm (DSA OID);</span></div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;<span class="comment"> * - 4 bytes of BIT STRING overhead;</span></div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;<span class="comment"> * - 3 full-size INTEGERs (p, g, y);</span></div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;<span class="comment"> * - 1 + 1 + 32 bytes for 1 sub-size INTEGER (q &lt;= 256 bits).</span></div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;<span class="preprocessor">#define PSA_KEY_EXPORT_DSA_PUBLIC_KEY_MAX_SIZE(key_bits)        \</span></div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;<span class="preprocessor">    (PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE(key_bits) * 3 + 59)</span></div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;<span class="comment">/* Maximum size of the export encoding of a DSA key pair.</span></div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;<span class="comment"> * DSAPrivateKey ::= SEQUENCE {</span></div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;<span class="comment"> *     version             Version,  -- 0</span></div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;<span class="comment"> *     prime               INTEGER,  -- p</span></div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;<span class="comment"> *     subprime            INTEGER,  -- q</span></div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;<span class="comment"> *     generator           INTEGER,  -- g</span></div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;<span class="comment"> *     public              INTEGER,  -- y</span></div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;<span class="comment"> *     private             INTEGER,  -- x</span></div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;<span class="comment"> * }</span></div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;<span class="comment"> * - 4 bytes of SEQUENCE overhead;</span></div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;<span class="comment"> * - 3 bytes of version;</span></div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;<span class="comment"> * - 3 full-size INTEGERs (p, g, y);</span></div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;<span class="comment"> * - 2 * (1 + 1 + 32) bytes for 2 sub-size INTEGERs (q, x &lt;= 256 bits).</span></div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;<span class="preprocessor">#define PSA_KEY_EXPORT_DSA_KEYPAIR_MAX_SIZE(key_bits)   \</span></div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;<span class="preprocessor">    (PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE(key_bits) * 3 + 75)</span></div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;<span class="comment">/* Maximum size of the export encoding of an ECC public key.</span></div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;<span class="comment"> * SubjectPublicKeyInfo  ::=  SEQUENCE  {</span></div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;<span class="comment"> *      algorithm            AlgorithmIdentifier,</span></div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;<span class="comment"> *      subjectPublicKey     BIT STRING  } -- contains ECPoint</span></div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;<span class="comment"> * AlgorithmIdentifier  ::=  SEQUENCE  {</span></div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;<span class="comment"> *      algorithm               OBJECT IDENTIFIER,</span></div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;<span class="comment"> *      parameters              OBJECT IDENTIFIER } -- namedCurve</span></div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;<span class="comment"> * ECPoint ::= ...</span></div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;<span class="comment"> *    -- first 8 bits: 0x04;</span></div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;<span class="comment"> *    -- then x_P as a `ceiling(m/8)`-byte string, big endian;</span></div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;<span class="comment"> *    -- then y_P as a `ceiling(m/8)`-byte string, big endian;</span></div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;<span class="comment"> *    -- where `m` is the bit size associated with the curve.</span></div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;<span class="comment"> * - 2 * 4 bytes of SEQUENCE overhead;</span></div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;<span class="comment"> * - 1 + 1 + 7 bytes of algorithm (id-ecPublicKey OID);</span></div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;<span class="comment"> * - 1 + 1 + 12 bytes of namedCurve OID;</span></div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;<span class="comment"> * - 4 bytes of BIT STRING overhead;</span></div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;<span class="comment"> * - 1 byte + 2 * point size in ECPoint.</span></div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;<span class="preprocessor">#define PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_bits)        \</span></div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;<span class="preprocessor">    (2 * PSA_BITS_TO_BYTES(key_bits) + 36)</span></div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;<span class="comment">/* Maximum size of the export encoding of an ECC key pair.</span></div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;<span class="comment"> * An ECC key pair is represented by the secret value.</span></div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;<span class="preprocessor">#define PSA_KEY_EXPORT_ECC_KEYPAIR_MAX_SIZE(key_bits)   \</span></div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;<span class="preprocessor">    (PSA_BITS_TO_BYTES(key_bits))</span></div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;</div><div class="line"><a name="l00610"></a><span class="lineno"><a class="line" href="crypto__sizes_8h.html#a0aae885cc8ff92e00fb5248420b939c3">  610</a></span>&#160;<span class="preprocessor">#define PSA_KEY_EXPORT_MAX_SIZE(key_type, key_bits)                     \</span></div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;<span class="preprocessor">    (PSA_KEY_TYPE_IS_UNSTRUCTURED(key_type) ? PSA_BITS_TO_BYTES(key_bits) : \</span></div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;<span class="preprocessor">     (key_type) == PSA_KEY_TYPE_RSA_KEYPAIR ? PSA_KEY_EXPORT_RSA_KEYPAIR_MAX_SIZE(key_bits) : \</span></div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;<span class="preprocessor">     (key_type) == PSA_KEY_TYPE_RSA_PUBLIC_KEY ? PSA_KEY_EXPORT_RSA_PUBLIC_KEY_MAX_SIZE(key_bits) : \</span></div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;<span class="preprocessor">     (key_type) == PSA_KEY_TYPE_DSA_KEYPAIR ? PSA_KEY_EXPORT_DSA_KEYPAIR_MAX_SIZE(key_bits) : \</span></div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;<span class="preprocessor">     (key_type) == PSA_KEY_TYPE_DSA_PUBLIC_KEY ? PSA_KEY_EXPORT_DSA_PUBLIC_KEY_MAX_SIZE(key_bits) : \</span></div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;<span class="preprocessor">     PSA_KEY_TYPE_IS_ECC_KEYPAIR(key_type) ? PSA_KEY_EXPORT_ECC_KEYPAIR_MAX_SIZE(key_bits) : \</span></div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;<span class="preprocessor">     PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY(key_type) ? PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_bits) : \</span></div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;<span class="preprocessor">     0)</span></div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* PSA_CRYPTO_SIZES_H */</span><span class="preprocessor"></span></div></div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/crypto__types_8h.html b/docs/html/crypto__types_8h.html
new file mode 100644
index 0000000..e7966d5
--- /dev/null
+++ b/docs/html/crypto__types_8h.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: psa/crypto_types.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_7dae9cfde651cd3cb034485ce5e391b9.html">psa</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#typedef-members">Typedefs</a>  </div>
+  <div class="headertitle">
+<div class="title">crypto_types.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>PSA cryptography module: type aliases.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br />
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for crypto_types.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="crypto__types_8h__incl.png" border="0" usemap="#psa_2crypto__types_8h" alt=""/></div>
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="crypto__types_8h__dep__incl.png" border="0" usemap="#psa_2crypto__types_8hdep" alt=""/></div>
+<map name="psa_2crypto__types_8hdep" id="psa_2crypto__types_8hdep">
+<area shape="rect" id="node2" href="crypto_8h.html" title="Platform Security Architecture cryptography module. " alt="" coords="25,80,119,107"/>
+</map>
+</div>
+</div>
+<p><a href="crypto__types_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga05676e70ba5c6a7565aff3c36677c1f9"><td class="memItemLeft" align="right" valign="top">typedef int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a></td></tr>
+<tr class="memdesc:ga05676e70ba5c6a7565aff3c36677c1f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function return status.  <a href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">More...</a><br /></td></tr>
+<tr class="separator:ga05676e70ba5c6a7565aff3c36677c1f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga578159487dfc7096cb191b0d2befe628"><td class="memItemLeft" align="right" valign="top">
+typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a></td></tr>
+<tr class="memdesc:ga578159487dfc7096cb191b0d2befe628"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encoding of a key type. <br /></td></tr>
+<tr class="separator:ga578159487dfc7096cb191b0d2befe628"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4e8977c145cce5077c4bce7fec890ad9"><td class="memItemLeft" align="right" valign="top">typedef uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a></td></tr>
+<tr class="separator:ga4e8977c145cce5077c4bce7fec890ad9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac2e4d47f1300d73c2f829a6d99252d69"><td class="memItemLeft" align="right" valign="top">typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a></td></tr>
+<tr class="memdesc:gac2e4d47f1300d73c2f829a6d99252d69"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encoding of a cryptographic algorithm.  <a href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">More...</a><br /></td></tr>
+<tr class="separator:gac2e4d47f1300d73c2f829a6d99252d69"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6821ff6dd39dc2bc370ded760ad8b0cf"><td class="memItemLeft" align="right" valign="top">typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a></td></tr>
+<tr class="separator:ga6821ff6dd39dc2bc370ded760ad8b0cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga11e986351c65bd3dc3c0fe2cd9926e4b"><td class="memItemLeft" align="right" valign="top">typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">psa_key_id_t</a></td></tr>
+<tr class="separator:ga11e986351c65bd3dc3c0fe2cd9926e4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7bb9de71337e0e98de843aa7f9b55f25"><td class="memItemLeft" align="right" valign="top">
+typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a></td></tr>
+<tr class="memdesc:ga7bb9de71337e0e98de843aa7f9b55f25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encoding of permitted usage on a key. <br /></td></tr>
+<tr class="separator:ga7bb9de71337e0e98de843aa7f9b55f25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaac4eeacd36596c548b3a48fc06c5048b"><td class="memItemLeft" align="right" valign="top">
+typedef uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a></td></tr>
+<tr class="memdesc:gaac4eeacd36596c548b3a48fc06c5048b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encoding of the step of a key derivation. <br /></td></tr>
+<tr class="separator:gaac4eeacd36596c548b3a48fc06c5048b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>PSA cryptography module: type aliases. </p>
+<dl class="section note"><dt>Note</dt><dd>This file may not be included directly. Applications must include <a class="el" href="crypto_8h.html" title="Platform Security Architecture cryptography module. ">psa/crypto.h</a>. Drivers must include the appropriate driver header file.</dd></dl>
+<p>This file contains portable definitions of integral types for properties of cryptographic keys, designations of cryptographic algorithms, and error codes returned by the library.</p>
+<p>This header file does not declare any function. </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/crypto__types_8h__dep__incl.map b/docs/html/crypto__types_8h__dep__incl.map
new file mode 100644
index 0000000..016a938
--- /dev/null
+++ b/docs/html/crypto__types_8h__dep__incl.map
@@ -0,0 +1,3 @@
+<map id="psa/crypto_types.h" name="psa/crypto_types.h">
+<area shape="rect" id="node2" href="$crypto_8h.html" title="Platform Security Architecture cryptography module. " alt="" coords="25,80,119,107"/>
+</map>
diff --git a/docs/html/crypto__types_8h__dep__incl.md5 b/docs/html/crypto__types_8h__dep__incl.md5
new file mode 100644
index 0000000..cc8e252
--- /dev/null
+++ b/docs/html/crypto__types_8h__dep__incl.md5
@@ -0,0 +1 @@
+19ffd65c9274efafd90318d61b94f227
\ No newline at end of file
diff --git a/docs/html/crypto__types_8h__dep__incl.png b/docs/html/crypto__types_8h__dep__incl.png
new file mode 100644
index 0000000..c1bd721
--- /dev/null
+++ b/docs/html/crypto__types_8h__dep__incl.png
Binary files differ
diff --git a/docs/html/crypto__types_8h__incl.map b/docs/html/crypto__types_8h__incl.map
new file mode 100644
index 0000000..11067e3
--- /dev/null
+++ b/docs/html/crypto__types_8h__incl.map
@@ -0,0 +1,2 @@
+<map id="psa/crypto_types.h" name="psa/crypto_types.h">
+</map>
diff --git a/docs/html/crypto__types_8h__incl.md5 b/docs/html/crypto__types_8h__incl.md5
new file mode 100644
index 0000000..a8f817c
--- /dev/null
+++ b/docs/html/crypto__types_8h__incl.md5
@@ -0,0 +1 @@
+db0e3c891220b01bcf6c8127efbdc53b
\ No newline at end of file
diff --git a/docs/html/crypto__types_8h__incl.png b/docs/html/crypto__types_8h__incl.png
new file mode 100644
index 0000000..f23f127
--- /dev/null
+++ b/docs/html/crypto__types_8h__incl.png
Binary files differ
diff --git a/docs/html/crypto__types_8h_source.html b/docs/html/crypto__types_8h_source.html
new file mode 100644
index 0000000..6641669
--- /dev/null
+++ b/docs/html/crypto__types_8h_source.html
@@ -0,0 +1,109 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: psa/crypto_types.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_7dae9cfde651cd3cb034485ce5e391b9.html">psa</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">crypto_types.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="crypto__types_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> *  Copyright (C) 2018, ARM Limited, All Rights Reserved</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> *  SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> *  Licensed under the Apache License, Version 2.0 (the &quot;License&quot;); you may</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> *  not use this file except in compliance with the License.</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> *  You may obtain a copy of the License at</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> *  http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> *  Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> *  distributed under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment"> *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"> *  See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment"> *  limitations under the License.</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"> *  This file is part of mbed TLS (https://tls.mbed.org)</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#ifndef PSA_CRYPTO_TYPES_H</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor">#define PSA_CRYPTO_TYPES_H</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">#include &lt;stdint.h&gt;</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">   51</a></span>&#160;<span class="keyword">typedef</span> int32_t <a class="code" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">   61</a></span>&#160;<span class="keyword">typedef</span> uint32_t <a class="code" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>;</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">   64</a></span>&#160;<span class="keyword">typedef</span> uint16_t <a class="code" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">   74</a></span>&#160;<span class="keyword">typedef</span> uint32_t <a class="code" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>;</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">   84</a></span>&#160;<span class="keyword">typedef</span> uint32_t <a class="code" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a>;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">   88</a></span>&#160;<span class="keyword">typedef</span> uint32_t <a class="code" href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">psa_key_id_t</a>;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">   97</a></span>&#160;<span class="keyword">typedef</span> uint32_t <a class="code" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>;</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">  106</a></span>&#160;<span class="keyword">typedef</span> uint16_t <a class="code" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a>;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* PSA_CRYPTO_TYPES_H */</span><span class="preprocessor"></span></div><div class="ttc" id="group__crypto__types_html_ga4e8977c145cce5077c4bce7fec890ad9"><div class="ttname"><a href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a></div><div class="ttdeci">uint16_t psa_ecc_curve_t</div><div class="ttdef"><b>Definition:</b> crypto_types.h:64</div></div>
+<div class="ttc" id="group__derivation_html_gaac4eeacd36596c548b3a48fc06c5048b"><div class="ttname"><a href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a></div><div class="ttdeci">uint16_t psa_key_derivation_step_t</div><div class="ttdoc">Encoding of the step of a key derivation. </div><div class="ttdef"><b>Definition:</b> crypto_types.h:106</div></div>
+<div class="ttc" id="group__key__lifetimes_html_ga11e986351c65bd3dc3c0fe2cd9926e4b"><div class="ttname"><a href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">psa_key_id_t</a></div><div class="ttdeci">uint32_t psa_key_id_t</div><div class="ttdef"><b>Definition:</b> crypto_types.h:88</div></div>
+<div class="ttc" id="group__crypto__types_html_gac2e4d47f1300d73c2f829a6d99252d69"><div class="ttname"><a href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a></div><div class="ttdeci">uint32_t psa_algorithm_t</div><div class="ttdoc">Encoding of a cryptographic algorithm. </div><div class="ttdef"><b>Definition:</b> crypto_types.h:74</div></div>
+<div class="ttc" id="group__policy_html_ga7bb9de71337e0e98de843aa7f9b55f25"><div class="ttname"><a href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a></div><div class="ttdeci">uint32_t psa_key_usage_t</div><div class="ttdoc">Encoding of permitted usage on a key. </div><div class="ttdef"><b>Definition:</b> crypto_types.h:97</div></div>
+<div class="ttc" id="group__crypto__types_html_ga578159487dfc7096cb191b0d2befe628"><div class="ttname"><a href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a></div><div class="ttdeci">uint32_t psa_key_type_t</div><div class="ttdoc">Encoding of a key type. </div><div class="ttdef"><b>Definition:</b> crypto_types.h:61</div></div>
+<div class="ttc" id="group__key__lifetimes_html_ga6821ff6dd39dc2bc370ded760ad8b0cf"><div class="ttname"><a href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a></div><div class="ttdeci">uint32_t psa_key_lifetime_t</div><div class="ttdef"><b>Definition:</b> crypto_types.h:84</div></div>
+<div class="ttc" id="group__error_html_ga05676e70ba5c6a7565aff3c36677c1f9"><div class="ttname"><a href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a></div><div class="ttdeci">int32_t psa_status_t</div><div class="ttdoc">Function return status. </div><div class="ttdef"><b>Definition:</b> crypto_types.h:51</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/crypto__values_8h.html b/docs/html/crypto__values_8h.html
new file mode 100644
index 0000000..b8a767e
--- /dev/null
+++ b/docs/html/crypto__values_8h.html
@@ -0,0 +1,689 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: psa/crypto_values.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_7dae9cfde651cd3cb034485ce5e391b9.html">psa</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a>  </div>
+  <div class="headertitle">
+<div class="title">crypto_values.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>PSA cryptography module: macros to build and analyze integer values.  
+<a href="#details">More...</a></p>
+<div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="crypto__values_8h__dep__incl.png" border="0" usemap="#psa_2crypto__values_8hdep" alt=""/></div>
+<map name="psa_2crypto__values_8hdep" id="psa_2crypto__values_8hdep">
+<area shape="rect" id="node2" href="crypto_8h.html" title="Platform Security Architecture cryptography module. " alt="" coords="27,80,122,107"/>
+</map>
+</div>
+</div>
+<p><a href="crypto__values_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga4cc859e2c66ca381c7418db3527a65e1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)0)</td></tr>
+<tr class="separator:ga4cc859e2c66ca381c7418db3527a65e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga24d5fdcdd759f846f79d9e581c63a83f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga24d5fdcdd759f846f79d9e581c63a83f">PSA_ERROR_UNKNOWN_ERROR</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)1)</td></tr>
+<tr class="separator:ga24d5fdcdd759f846f79d9e581c63a83f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1dcc6d130633ed5db8942257581b55dd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)2)</td></tr>
+<tr class="separator:ga1dcc6d130633ed5db8942257581b55dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4d1b8dd8526177a15a210b7afc1accb1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)3)</td></tr>
+<tr class="separator:ga4d1b8dd8526177a15a210b7afc1accb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga695025f4ec11249aee7ea3d0f65e01c8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)4)</td></tr>
+<tr class="separator:ga695025f4ec11249aee7ea3d0f65e01c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac2fee3a51249fbea45360aaa911f3e58"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#gac2fee3a51249fbea45360aaa911f3e58">PSA_ERROR_OCCUPIED_SLOT</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)5)</td></tr>
+<tr class="separator:gac2fee3a51249fbea45360aaa911f3e58"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaba00e3e6ceb2b12965a81e5ac02ae040"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)6)</td></tr>
+<tr class="separator:gaba00e3e6ceb2b12965a81e5ac02ae040"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga933d40fa2a591004f2e93aa91e11db84"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)7)</td></tr>
+<tr class="separator:ga933d40fa2a591004f2e93aa91e11db84"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga798df25a505ebf931f7bec1f80f1f85f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)8)</td></tr>
+<tr class="separator:ga798df25a505ebf931f7bec1f80f1f85f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga91b2ad8a867517a2651f1b076c5216e5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)9)</td></tr>
+<tr class="separator:ga91b2ad8a867517a2651f1b076c5216e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga897a45eb206a6f6b7be7ffbe36f0d766"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga897a45eb206a6f6b7be7ffbe36f0d766">PSA_ERROR_INSUFFICIENT_STORAGE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)10)</td></tr>
+<tr class="separator:ga897a45eb206a6f6b7be7ffbe36f0d766"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5cdb6948371d49e916106249020ea3f7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)11)</td></tr>
+<tr class="separator:ga5cdb6948371d49e916106249020ea3f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadd169a1af2707862b95fb9df91dfc37d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#gadd169a1af2707862b95fb9df91dfc37d">PSA_ERROR_STORAGE_FAILURE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)12)</td></tr>
+<tr class="separator:gadd169a1af2707862b95fb9df91dfc37d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga08b10e70fa5ff0b05c631d9f8f6b2c6b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)13)</td></tr>
+<tr class="separator:ga08b10e70fa5ff0b05c631d9f8f6b2c6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2c5dda1485cb54f2385cb9c1279a7004"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)14)</td></tr>
+<tr class="separator:ga2c5dda1485cb54f2385cb9c1279a7004"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4deb59fec02297ec5d8b42178323f675"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga4deb59fec02297ec5d8b42178323f675">PSA_ERROR_INSUFFICIENT_ENTROPY</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)15)</td></tr>
+<tr class="separator:ga4deb59fec02297ec5d8b42178323f675"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga35927f755d232c4766de600f2c49e9f2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga35927f755d232c4766de600f2c49e9f2">PSA_ERROR_INVALID_SIGNATURE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)16)</td></tr>
+<tr class="separator:ga35927f755d232c4766de600f2c49e9f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gabe29594edbfb152cf153975b0597ac48"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#gabe29594edbfb152cf153975b0597ac48">PSA_ERROR_INVALID_PADDING</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)17)</td></tr>
+<tr class="separator:gabe29594edbfb152cf153975b0597ac48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf1fa61f72e9e5b4a848c991bea495767"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#gaf1fa61f72e9e5b4a848c991bea495767">PSA_ERROR_INSUFFICIENT_CAPACITY</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)18)</td></tr>
+<tr class="separator:gaf1fa61f72e9e5b4a848c991bea495767"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadf22718935657c2c3168c228204085f9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)19)</td></tr>
+<tr class="separator:gadf22718935657c2c3168c228204085f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafce7ab2b54ce97ea5bff73f13a9f3e5b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gafce7ab2b54ce97ea5bff73f13a9f3e5b">PSA_KEY_TYPE_NONE</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x00000000)</td></tr>
+<tr class="separator:gafce7ab2b54ce97ea5bff73f13a9f3e5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8dbaed2fdb1ebae8aa127ad3988516f7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga8dbaed2fdb1ebae8aa127ad3988516f7">PSA_KEY_TYPE_VENDOR_FLAG</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x80000000)</td></tr>
+<tr class="separator:ga8dbaed2fdb1ebae8aa127ad3988516f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6eeda1b2a1550050cf68dbcac35ad8ac"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_CATEGORY_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70000000)</td></tr>
+<tr class="separator:ga6eeda1b2a1550050cf68dbcac35ad8ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8f214beb04334be08f927f227f097ef1"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_CATEGORY_SYMMETRIC</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000000)</td></tr>
+<tr class="separator:ga8f214beb04334be08f927f227f097ef1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab8af75718c5e7b8987720a3fe8abb18f"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_CATEGORY_RAW</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x50000000)</td></tr>
+<tr class="separator:gab8af75718c5e7b8987720a3fe8abb18f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga58b975beeee1f937cecb71c8051c6357"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x60000000)</td></tr>
+<tr class="separator:ga58b975beeee1f937cecb71c8051c6357"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga708196a91ec0384de98e092b9a16f5e8"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_CATEGORY_KEY_PAIR</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70000000)</td></tr>
+<tr class="separator:ga708196a91ec0384de98e092b9a16f5e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5a77cb4db2d02ffce77631339e3240f4"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_CATEGORY_FLAG_PAIR</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x10000000)</td></tr>
+<tr class="separator:ga5a77cb4db2d02ffce77631339e3240f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadbe4c086a6562aefe344bc79e51bdfd3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gadbe4c086a6562aefe344bc79e51bdfd3">PSA_KEY_TYPE_IS_VENDOR_DEFINED</a>(type)&#160;&#160;&#160;(((type) &amp; <a class="el" href="group__crypto__types.html#ga8dbaed2fdb1ebae8aa127ad3988516f7">PSA_KEY_TYPE_VENDOR_FLAG</a>) != 0)</td></tr>
+<tr class="separator:gadbe4c086a6562aefe344bc79e51bdfd3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaef86ce4e810e1c2c76068ac874bfef54"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaef86ce4e810e1c2c76068ac874bfef54">PSA_KEY_TYPE_IS_UNSTRUCTURED</a>(type)</td></tr>
+<tr class="separator:gaef86ce4e810e1c2c76068ac874bfef54"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab138ae2ebf2905dfbaf4154db2620939"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gab138ae2ebf2905dfbaf4154db2620939">PSA_KEY_TYPE_IS_ASYMMETRIC</a>(type)</td></tr>
+<tr class="separator:gab138ae2ebf2905dfbaf4154db2620939"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac674a0f059bc0cb72b47f0c517b4f45b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gac674a0f059bc0cb72b47f0c517b4f45b">PSA_KEY_TYPE_IS_PUBLIC_KEY</a>(type)&#160;&#160;&#160;(((type) &amp; PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY)</td></tr>
+<tr class="separator:gac674a0f059bc0cb72b47f0c517b4f45b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac14c6d6e1b2b7f4a92a7b757465cff29"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gac14c6d6e1b2b7f4a92a7b757465cff29">PSA_KEY_TYPE_IS_KEYPAIR</a>(type)&#160;&#160;&#160;(((type) &amp; PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_KEY_PAIR)</td></tr>
+<tr class="separator:gac14c6d6e1b2b7f4a92a7b757465cff29"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf09f1ca1de6a7e7cff0fe516f3f6c91d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaf09f1ca1de6a7e7cff0fe516f3f6c91d">PSA_KEY_TYPE_KEYPAIR_OF_PUBLIC_KEY</a>(type)&#160;&#160;&#160;((type) | PSA_KEY_TYPE_CATEGORY_FLAG_PAIR)</td></tr>
+<tr class="separator:gaf09f1ca1de6a7e7cff0fe516f3f6c91d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gace08e46dd7cbf642d50d982a25d02bec"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a>(type)&#160;&#160;&#160;((type) &amp; ~PSA_KEY_TYPE_CATEGORY_FLAG_PAIR)</td></tr>
+<tr class="separator:gace08e46dd7cbf642d50d982a25d02bec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa97f92025533102616b32d571c940d80"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa97f92025533102616b32d571c940d80">PSA_KEY_TYPE_RAW_DATA</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x50000001)</td></tr>
+<tr class="separator:gaa97f92025533102616b32d571c940d80"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga92d989f4ca64abd00f463defd773a6f8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga92d989f4ca64abd00f463defd773a6f8">PSA_KEY_TYPE_HMAC</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x51000000)</td></tr>
+<tr class="separator:ga92d989f4ca64abd00f463defd773a6f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae871b2357b8593f33bfd51abbf93ebb1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gae871b2357b8593f33bfd51abbf93ebb1">PSA_KEY_TYPE_DERIVE</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x52000000)</td></tr>
+<tr class="separator:gae871b2357b8593f33bfd51abbf93ebb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6ee54579dcf278c677eda4bb1a29575e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga6ee54579dcf278c677eda4bb1a29575e">PSA_KEY_TYPE_AES</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000001)</td></tr>
+<tr class="separator:ga6ee54579dcf278c677eda4bb1a29575e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga577562bfbbc691c820d55ec308333138"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga577562bfbbc691c820d55ec308333138">PSA_KEY_TYPE_DES</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000002)</td></tr>
+<tr class="separator:ga577562bfbbc691c820d55ec308333138"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad8e5da742343fd5519f9d8a630c2ed81"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gad8e5da742343fd5519f9d8a630c2ed81">PSA_KEY_TYPE_CAMELLIA</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000003)</td></tr>
+<tr class="separator:gad8e5da742343fd5519f9d8a630c2ed81"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae4d46e83f910dcaa126000a8ed03cde9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gae4d46e83f910dcaa126000a8ed03cde9">PSA_KEY_TYPE_ARC4</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000004)</td></tr>
+<tr class="separator:gae4d46e83f910dcaa126000a8ed03cde9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9ba0878f56c8bcd1995ac017a74f513b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga9ba0878f56c8bcd1995ac017a74f513b">PSA_KEY_TYPE_RSA_PUBLIC_KEY</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x60010000)</td></tr>
+<tr class="separator:ga9ba0878f56c8bcd1995ac017a74f513b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga581f50687f5d650456925278948f2799"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga581f50687f5d650456925278948f2799">PSA_KEY_TYPE_RSA_KEYPAIR</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70010000)</td></tr>
+<tr class="separator:ga581f50687f5d650456925278948f2799"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0e1d8f241228e49c9cadadfb4579ef1a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga0e1d8f241228e49c9cadadfb4579ef1a">PSA_KEY_TYPE_IS_RSA</a>(type)&#160;&#160;&#160;(<a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a>(type) == <a class="el" href="group__crypto__types.html#ga9ba0878f56c8bcd1995ac017a74f513b">PSA_KEY_TYPE_RSA_PUBLIC_KEY</a>)</td></tr>
+<tr class="separator:ga0e1d8f241228e49c9cadadfb4579ef1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5e7439c2905136366c3a876e62e5ddfc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga5e7439c2905136366c3a876e62e5ddfc">PSA_KEY_TYPE_DSA_PUBLIC_KEY</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x60020000)</td></tr>
+<tr class="separator:ga5e7439c2905136366c3a876e62e5ddfc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga011010ee28c20388f3d89fb27088ed62"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga011010ee28c20388f3d89fb27088ed62">PSA_KEY_TYPE_DSA_KEYPAIR</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70020000)</td></tr>
+<tr class="separator:ga011010ee28c20388f3d89fb27088ed62"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga273fdfcf23eb0624f8b63d2321cf95c1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga273fdfcf23eb0624f8b63d2321cf95c1">PSA_KEY_TYPE_IS_DSA</a>(type)&#160;&#160;&#160;(<a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a>(type) == <a class="el" href="group__crypto__types.html#ga5e7439c2905136366c3a876e62e5ddfc">PSA_KEY_TYPE_DSA_PUBLIC_KEY</a>)</td></tr>
+<tr class="separator:ga273fdfcf23eb0624f8b63d2321cf95c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad8d37a32a305dda9fb4af1707aace47c"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x60030000)</td></tr>
+<tr class="separator:gad8d37a32a305dda9fb4af1707aace47c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6754658749714c6ac674bdf6d2d40767"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_ECC_KEYPAIR_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70030000)</td></tr>
+<tr class="separator:ga6754658749714c6ac674bdf6d2d40767"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadc2a3c0041ac1d0a2b6f421d8e089b25"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_ECC_CURVE_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x0000ffff)</td></tr>
+<tr class="separator:gadc2a3c0041ac1d0a2b6f421d8e089b25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadf3ad65d157bf5282849c954bf3f51af"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gadf3ad65d157bf5282849c954bf3f51af">PSA_KEY_TYPE_ECC_KEYPAIR</a>(curve)&#160;&#160;&#160;(PSA_KEY_TYPE_ECC_KEYPAIR_BASE | (curve))</td></tr>
+<tr class="separator:gadf3ad65d157bf5282849c954bf3f51af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad54c03d3b47020e571a72cd01d978cf2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gad54c03d3b47020e571a72cd01d978cf2">PSA_KEY_TYPE_ECC_PUBLIC_KEY</a>(curve)&#160;&#160;&#160;(PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE | (curve))</td></tr>
+<tr class="separator:gad54c03d3b47020e571a72cd01d978cf2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga88e01fa06b585654689a99bcc06bbe66"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga88e01fa06b585654689a99bcc06bbe66">PSA_KEY_TYPE_IS_ECC</a>(type)</td></tr>
+<tr class="separator:ga88e01fa06b585654689a99bcc06bbe66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7bf101b671e8cf26f4cb08fcb679db4b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga7bf101b671e8cf26f4cb08fcb679db4b">PSA_KEY_TYPE_IS_ECC_KEYPAIR</a>(type)</td></tr>
+<tr class="separator:ga7bf101b671e8cf26f4cb08fcb679db4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5af146a173b0c84d7e737e2fb6a3c0a7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga5af146a173b0c84d7e737e2fb6a3c0a7">PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY</a>(type)</td></tr>
+<tr class="separator:ga5af146a173b0c84d7e737e2fb6a3c0a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0c567210e6f80aa8f2aa87efa7a3a3f9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga0c567210e6f80aa8f2aa87efa7a3a3f9">PSA_KEY_TYPE_GET_CURVE</a>(type)</td></tr>
+<tr class="separator:ga0c567210e6f80aa8f2aa87efa7a3a3f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4201013d5947c375fae7311b0f98bac7"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT163K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0001)</td></tr>
+<tr class="separator:ga4201013d5947c375fae7311b0f98bac7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaca8816b785f492a8795b5276977d1369"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT163R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0002)</td></tr>
+<tr class="separator:gaca8816b785f492a8795b5276977d1369"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4ab7a853ceb3ad0a525ecb571633a1ca"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT163R2</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0003)</td></tr>
+<tr class="separator:ga4ab7a853ceb3ad0a525ecb571633a1ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac9fd11da90ca67649a5f51a158afe5f3"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT193R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0004)</td></tr>
+<tr class="separator:gac9fd11da90ca67649a5f51a158afe5f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7a77f5e385f6439dae5857a7f35756eb"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT193R2</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0005)</td></tr>
+<tr class="separator:ga7a77f5e385f6439dae5857a7f35756eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga36e409c36983e41db5db202b1d2095b5"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT233K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0006)</td></tr>
+<tr class="separator:ga36e409c36983e41db5db202b1d2095b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga54997a9f8ef752c6d717171e01c31019"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT233R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0007)</td></tr>
+<tr class="separator:ga54997a9f8ef752c6d717171e01c31019"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaabccf2759188c3e98d82faa5d8dfcd8c"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT239K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0008)</td></tr>
+<tr class="separator:gaabccf2759188c3e98d82faa5d8dfcd8c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga28c765d75773b5fe083219e7c0b054f9"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT283K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0009)</td></tr>
+<tr class="separator:ga28c765d75773b5fe083219e7c0b054f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafd8ecacea0d9e7e1a0247c047baf3372"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT283R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x000a)</td></tr>
+<tr class="separator:gafd8ecacea0d9e7e1a0247c047baf3372"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2bf301617cc84a6f2b36a86cc29eaf4d"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT409K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x000b)</td></tr>
+<tr class="separator:ga2bf301617cc84a6f2b36a86cc29eaf4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae41caa1cc16d3c35769b6edcb62c8957"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT409R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x000c)</td></tr>
+<tr class="separator:gae41caa1cc16d3c35769b6edcb62c8957"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2043aa519549a6194d132d81816879bc"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT571K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x000d)</td></tr>
+<tr class="separator:ga2043aa519549a6194d132d81816879bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1607d2cb9591b56dbe1295bedc33e19e"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT571R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x000e)</td></tr>
+<tr class="separator:ga1607d2cb9591b56dbe1295bedc33e19e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2ad14935d244d93ee0e4cfe9b1f218a4"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP160K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x000f)</td></tr>
+<tr class="separator:ga2ad14935d244d93ee0e4cfe9b1f218a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga35ed41203039e94eb4855cc70f28f7f0"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP160R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0010)</td></tr>
+<tr class="separator:ga35ed41203039e94eb4855cc70f28f7f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac465f57c34914a01aea8c220a613dfe6"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP160R2</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0011)</td></tr>
+<tr class="separator:gac465f57c34914a01aea8c220a613dfe6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga58c806d45ab350287ddc49da833bd558"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP192K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0012)</td></tr>
+<tr class="separator:ga58c806d45ab350287ddc49da833bd558"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5aa3ceff4603fa3fafd8f2286c5d3e4a"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP192R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0013)</td></tr>
+<tr class="separator:ga5aa3ceff4603fa3fafd8f2286c5d3e4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gabfaaab2eaab0ac360e41c1aff6133cdf"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP224K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0014)</td></tr>
+<tr class="separator:gabfaaab2eaab0ac360e41c1aff6133cdf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8d1d21b6b87ba4158235b876ae79031d"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP224R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0015)</td></tr>
+<tr class="separator:ga8d1d21b6b87ba4158235b876ae79031d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaaa61941f815aff976a1debd910b1704c"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP256K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0016)</td></tr>
+<tr class="separator:gaaa61941f815aff976a1debd910b1704c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga11224270225c2b2dbfa2ab01073a4e93"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP256R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0017)</td></tr>
+<tr class="separator:ga11224270225c2b2dbfa2ab01073a4e93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3e870a36493143507a01a28c70790fa3"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP384R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0018)</td></tr>
+<tr class="separator:ga3e870a36493143507a01a28c70790fa3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4482ff6155006ff509071c32ce263fdf"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP521R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0019)</td></tr>
+<tr class="separator:ga4482ff6155006ff509071c32ce263fdf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa999b69c56af0cc1cebf4596f8578191"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_BRAINPOOL_P256R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x001a)</td></tr>
+<tr class="separator:gaa999b69c56af0cc1cebf4596f8578191"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga79f95ed8050f2dc7750cbac212c6e687"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_BRAINPOOL_P384R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x001b)</td></tr>
+<tr class="separator:ga79f95ed8050f2dc7750cbac212c6e687"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa03a2dc6096f336be3d68a1f7405e86c"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_BRAINPOOL_P512R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x001c)</td></tr>
+<tr class="separator:gaa03a2dc6096f336be3d68a1f7405e86c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac94faf3b8d9884221541f51f26b11c7a"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_CURVE25519</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x001d)</td></tr>
+<tr class="separator:gac94faf3b8d9884221541f51f26b11c7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga902b0e91eff920873b3b59c740854305"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_CURVE448</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x001e)</td></tr>
+<tr class="separator:ga902b0e91eff920873b3b59c740854305"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga325a340d7c72d99d3a678eb210bf6e0a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga325a340d7c72d99d3a678eb210bf6e0a">PSA_KEY_TYPE_DH_PUBLIC_KEY</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x60040000)</td></tr>
+<tr class="separator:ga325a340d7c72d99d3a678eb210bf6e0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga39b63c6b97a62a316c0660bf72b2fdd5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga39b63c6b97a62a316c0660bf72b2fdd5">PSA_KEY_TYPE_DH_KEYPAIR</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70040000)</td></tr>
+<tr class="separator:ga39b63c6b97a62a316c0660bf72b2fdd5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga248ae35c0e2becaebbf479fc1c3a3b0e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga248ae35c0e2becaebbf479fc1c3a3b0e">PSA_KEY_TYPE_IS_DH</a>(type)&#160;&#160;&#160;(<a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a>(type) == <a class="el" href="group__crypto__types.html#ga325a340d7c72d99d3a678eb210bf6e0a">PSA_KEY_TYPE_DH_PUBLIC_KEY</a>)</td></tr>
+<tr class="separator:ga248ae35c0e2becaebbf479fc1c3a3b0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacaa366bdeb0413e63e87a667c5457b2e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gacaa366bdeb0413e63e87a667c5457b2e">PSA_BLOCK_CIPHER_BLOCK_SIZE</a>(type)</td></tr>
+<tr class="separator:gacaa366bdeb0413e63e87a667c5457b2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf5d76750b6cfe3e7f0c8e9eee1162318"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_VENDOR_FLAG</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x80000000)</td></tr>
+<tr class="separator:gaf5d76750b6cfe3e7f0c8e9eee1162318"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga25e918c465b4421dbfaedad6b693d110"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x7f000000)</td></tr>
+<tr class="separator:ga25e918c465b4421dbfaedad6b693d110"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafd048e1835b80e6daaff7fddce699757"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_HASH</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000000)</td></tr>
+<tr class="separator:gafd048e1835b80e6daaff7fddce699757"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5e6e0039d0b0d18afb3e13e5b9602b3a"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_MAC</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x02000000)</td></tr>
+<tr class="separator:ga5e6e0039d0b0d18afb3e13e5b9602b3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga68228a619db59eba93fd13e9129dbfe2"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_CIPHER</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04000000)</td></tr>
+<tr class="separator:ga68228a619db59eba93fd13e9129dbfe2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga37fdd9cac2552f1568f38e091a826549"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_AEAD</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x06000000)</td></tr>
+<tr class="separator:ga37fdd9cac2552f1568f38e091a826549"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga68a0af1dd89b33fb1e53139f654988f6"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_SIGN</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10000000)</td></tr>
+<tr class="separator:ga68a0af1dd89b33fb1e53139f654988f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga72f46c8256b760b174e6db61a61cd608"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x12000000)</td></tr>
+<tr class="separator:ga72f46c8256b760b174e6db61a61cd608"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac185b2274dd4e5f0b97c43334c2e478f"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_KEY_DERIVATION</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x20000000)</td></tr>
+<tr class="separator:gac185b2274dd4e5f0b97c43334c2e478f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga808e397a4891c612df4a5b20eebc2fac"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_KEY_AGREEMENT</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x30000000)</td></tr>
+<tr class="separator:ga808e397a4891c612df4a5b20eebc2fac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2396d8ba67096b3ebc69bc351a74c78b"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_VENDOR_DEFINED</b>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_VENDOR_FLAG) != 0)</td></tr>
+<tr class="separator:ga2396d8ba67096b3ebc69bc351a74c78b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac9280662bb482590b4b33d1dcd32930f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">PSA_ALG_IS_HASH</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_HASH)</td></tr>
+<tr class="separator:gac9280662bb482590b4b33d1dcd32930f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaca7aee4c9dde316b3b1a150a26eab776"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaca7aee4c9dde316b3b1a150a26eab776">PSA_ALG_IS_MAC</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_MAC)</td></tr>
+<tr class="separator:gaca7aee4c9dde316b3b1a150a26eab776"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1d1a5a402ad89a2e68f12bfb535490eb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga1d1a5a402ad89a2e68f12bfb535490eb">PSA_ALG_IS_CIPHER</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_CIPHER)</td></tr>
+<tr class="separator:ga1d1a5a402ad89a2e68f12bfb535490eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1d44829d60065eaa4ac9a703e7d6abc8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">PSA_ALG_IS_AEAD</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_AEAD)</td></tr>
+<tr class="separator:ga1d44829d60065eaa4ac9a703e7d6abc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6d490d0904e0698f6c1268a89d72ff31"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga6d490d0904e0698f6c1268a89d72ff31">PSA_ALG_IS_SIGN</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_SIGN)</td></tr>
+<tr class="separator:ga6d490d0904e0698f6c1268a89d72ff31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga41d2ee937d54efd76bd54a97b2ebc08a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga41d2ee937d54efd76bd54a97b2ebc08a">PSA_ALG_IS_ASYMMETRIC_ENCRYPTION</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION)</td></tr>
+<tr class="separator:ga41d2ee937d54efd76bd54a97b2ebc08a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab19961aac97f3856f83057b04ba7c5f5"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_KEY_SELECTION_FLAG</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000000)</td></tr>
+<tr class="separator:gab19961aac97f3856f83057b04ba7c5f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga59753742cb06553bd22751bbef472b6f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga59753742cb06553bd22751bbef472b6f">PSA_ALG_IS_KEY_AGREEMENT</a>(alg)</td></tr>
+<tr class="separator:ga59753742cb06553bd22751bbef472b6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf8b90c648aa53dbd06c236695e300cd0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaf8b90c648aa53dbd06c236695e300cd0">PSA_ALG_IS_KEY_DERIVATION</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_KEY_DERIVATION)</td></tr>
+<tr class="separator:gaf8b90c648aa53dbd06c236695e300cd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga51b1834ee5e98c6a83c2cfc7699f9077"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga51b1834ee5e98c6a83c2cfc7699f9077">PSA_ALG_IS_KEY_SELECTION</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_KEY_SELECTION)</td></tr>
+<tr class="separator:ga51b1834ee5e98c6a83c2cfc7699f9077"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac41a7077aef55bb20c629c8949d43c57"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_HASH_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x000000ff)</td></tr>
+<tr class="separator:gac41a7077aef55bb20c629c8949d43c57"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab076ca67238cb4ebd81556db8f3dbac1"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_MD2</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000001)</td></tr>
+<tr class="separator:gab076ca67238cb4ebd81556db8f3dbac1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaac7ab8c28c117ef4ddf01affc8d3ceb2"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_MD4</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000002)</td></tr>
+<tr class="separator:gaac7ab8c28c117ef4ddf01affc8d3ceb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gade591d9286d23382eb5cec099c84180d"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_MD5</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000003)</td></tr>
+<tr class="separator:gade591d9286d23382eb5cec099c84180d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6c5d3a32cda59086f07b85ef007033dd"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_RIPEMD160</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000004)</td></tr>
+<tr class="separator:ga6c5d3a32cda59086f07b85ef007033dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3fca4e9f9ad4a1158817d1850dee82e5"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_SHA_1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000005)</td></tr>
+<tr class="separator:ga3fca4e9f9ad4a1158817d1850dee82e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga25d6a3244d10a7148fe6b026d1979f7b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga25d6a3244d10a7148fe6b026d1979f7b">PSA_ALG_SHA_224</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000008)</td></tr>
+<tr class="separator:ga25d6a3244d10a7148fe6b026d1979f7b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga619471f978e13cdd0a1e37145e4bf341"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga619471f978e13cdd0a1e37145e4bf341">PSA_ALG_SHA_256</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000009)</td></tr>
+<tr class="separator:ga619471f978e13cdd0a1e37145e4bf341"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga58af64dd9a86a287e8da9ed7739eead4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga58af64dd9a86a287e8da9ed7739eead4">PSA_ALG_SHA_384</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x0100000a)</td></tr>
+<tr class="separator:ga58af64dd9a86a287e8da9ed7739eead4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafba3ae409f46d3dd7f37a0910660c3e9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gafba3ae409f46d3dd7f37a0910660c3e9">PSA_ALG_SHA_512</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x0100000b)</td></tr>
+<tr class="separator:gafba3ae409f46d3dd7f37a0910660c3e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3fe2d7c3c80e3186ca78d16a35d5d931"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga3fe2d7c3c80e3186ca78d16a35d5d931">PSA_ALG_SHA_512_224</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x0100000c)</td></tr>
+<tr class="separator:ga3fe2d7c3c80e3186ca78d16a35d5d931"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5910b3964c14e9613e8643a45b09c2d4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga5910b3964c14e9613e8643a45b09c2d4">PSA_ALG_SHA_512_256</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x0100000d)</td></tr>
+<tr class="separator:ga5910b3964c14e9613e8643a45b09c2d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga16f5fe34ccce68c2fada1224c054a999"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga16f5fe34ccce68c2fada1224c054a999">PSA_ALG_SHA3_224</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000010)</td></tr>
+<tr class="separator:ga16f5fe34ccce68c2fada1224c054a999"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaace70d9515489bbe3c5e7ac1b7d9155b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaace70d9515489bbe3c5e7ac1b7d9155b">PSA_ALG_SHA3_256</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000011)</td></tr>
+<tr class="separator:gaace70d9515489bbe3c5e7ac1b7d9155b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab0f079257ea75e2acfe2fc3b38c78cd8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gab0f079257ea75e2acfe2fc3b38c78cd8">PSA_ALG_SHA3_384</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000012)</td></tr>
+<tr class="separator:gab0f079257ea75e2acfe2fc3b38c78cd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga37e5dbe936dddb155e76f2997de27188"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga37e5dbe936dddb155e76f2997de27188">PSA_ALG_SHA3_512</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000013)</td></tr>
+<tr class="separator:ga37e5dbe936dddb155e76f2997de27188"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa1288ea8bd397a8a3f5e19e94110f2e4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa1288ea8bd397a8a3f5e19e94110f2e4">PSA_ALG_ANY_HASH</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x010000ff)</td></tr>
+<tr class="separator:gaa1288ea8bd397a8a3f5e19e94110f2e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gabba3fcfee55533b0e25350e78a942e07"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_MAC_SUBCATEGORY_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x00c00000)</td></tr>
+<tr class="separator:gabba3fcfee55533b0e25350e78a942e07"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0675192b82720fb8c9037a95bdeb6c88"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_HMAC_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x02800000)</td></tr>
+<tr class="separator:ga0675192b82720fb8c9037a95bdeb6c88"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga70f397425684b3efcde1e0e34c28261f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga70f397425684b3efcde1e0e34c28261f">PSA_ALG_HMAC</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_HMAC_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga70f397425684b3efcde1e0e34c28261f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaee84269106a947cb6ac353e15e6c4687"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_HMAC_GET_HASH</b>(hmac_alg)&#160;&#160;&#160;(PSA_ALG_CATEGORY_HASH | ((hmac_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:gaee84269106a947cb6ac353e15e6c4687"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4a050c3c3cbc6eb96418f18847601c8a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga4a050c3c3cbc6eb96418f18847601c8a">PSA_ALG_IS_HMAC</a>(alg)</td></tr>
+<tr class="separator:ga4a050c3c3cbc6eb96418f18847601c8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8c48784065c65c623a21b9a3ccc56b1d"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_MAC_TRUNCATION_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x00003f00)</td></tr>
+<tr class="separator:ga8c48784065c65c623a21b9a3ccc56b1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6db5ce573e6ad52068aba31c3afdce31"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_MAC_TRUNCATION_OFFSET</b>&#160;&#160;&#160;8</td></tr>
+<tr class="separator:ga6db5ce573e6ad52068aba31c3afdce31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf36137110baf7bb13c5028fd62c64276"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaf36137110baf7bb13c5028fd62c64276">PSA_ALG_TRUNCATED_MAC</a>(alg,  mac_length)</td></tr>
+<tr class="separator:gaf36137110baf7bb13c5028fd62c64276"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa05a8d99634f3350597ac9284fb70cb1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa05a8d99634f3350597ac9284fb70cb1">PSA_ALG_FULL_LENGTH_MAC</a>(alg)&#160;&#160;&#160;((alg) &amp; ~PSA_ALG_MAC_TRUNCATION_MASK)</td></tr>
+<tr class="separator:gaa05a8d99634f3350597ac9284fb70cb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab03726c4476174e019a08e2a04018ce8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gab03726c4476174e019a08e2a04018ce8">PSA_MAC_TRUNCATED_LENGTH</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_MAC_TRUNCATION_MASK) &gt;&gt; PSA_MAC_TRUNCATION_OFFSET)</td></tr>
+<tr class="separator:gab03726c4476174e019a08e2a04018ce8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaee0c29980b08305f6d0e7b3fbb588ade"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CIPHER_MAC_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x02c00000)</td></tr>
+<tr class="separator:gaee0c29980b08305f6d0e7b3fbb588ade"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga20bdc755de7b90f6621ccb1e6bb5d9e1"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CBC_MAC</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x02c00001)</td></tr>
+<tr class="separator:ga20bdc755de7b90f6621ccb1e6bb5d9e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga146328a1e0023a02464e232d6ecefdc2"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CMAC</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x02c00002)</td></tr>
+<tr class="separator:ga146328a1e0023a02464e232d6ecefdc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga69a012ce150219a2d97c3ab5582f0004"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_GMAC</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x02c00003)</td></tr>
+<tr class="separator:ga69a012ce150219a2d97c3ab5582f0004"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae49d1eb601125d65a5c5b252aa45479e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gae49d1eb601125d65a5c5b252aa45479e">PSA_ALG_IS_BLOCK_CIPHER_MAC</a>(alg)</td></tr>
+<tr class="separator:gae49d1eb601125d65a5c5b252aa45479e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac79618293c4254143caa75f6c5c82fa1"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CIPHER_STREAM_FLAG</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x00800000)</td></tr>
+<tr class="separator:gac79618293c4254143caa75f6c5c82fa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gabc80d19d140032e3b138db4ed37d0bd7"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CIPHER_FROM_BLOCK_FLAG</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x00400000)</td></tr>
+<tr class="separator:gabc80d19d140032e3b138db4ed37d0bd7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacfec68e0c6175e02e1b2ebc97df383c0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gacfec68e0c6175e02e1b2ebc97df383c0">PSA_ALG_IS_STREAM_CIPHER</a>(alg)</td></tr>
+<tr class="separator:gacfec68e0c6175e02e1b2ebc97df383c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab6a5284decb0e5e1b5b8740a41ef3c5e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gab6a5284decb0e5e1b5b8740a41ef3c5e">PSA_ALG_ARC4</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04800001)</td></tr>
+<tr class="separator:gab6a5284decb0e5e1b5b8740a41ef3c5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad318309706a769cffdc64e4c7e06b2e9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gad318309706a769cffdc64e4c7e06b2e9">PSA_ALG_CTR</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04c00001)</td></tr>
+<tr class="separator:gad318309706a769cffdc64e4c7e06b2e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0088c933e01d671f263a9a1f177cb5bc"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CFB</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04c00002)</td></tr>
+<tr class="separator:ga0088c933e01d671f263a9a1f177cb5bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae96bb421fa634c6fa8f571f0112f1ddb"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_OFB</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04c00003)</td></tr>
+<tr class="separator:gae96bb421fa634c6fa8f571f0112f1ddb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa722c0e426a797fd6d99623f59748125"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa722c0e426a797fd6d99623f59748125">PSA_ALG_XTS</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x044000ff)</td></tr>
+<tr class="separator:gaa722c0e426a797fd6d99623f59748125"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacb332d72716958880ee7f97d8365ae66"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gacb332d72716958880ee7f97d8365ae66">PSA_ALG_CBC_NO_PADDING</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04600100)</td></tr>
+<tr class="separator:gacb332d72716958880ee7f97d8365ae66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaef50d2e9716eb6d476046608e4e0c78c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaef50d2e9716eb6d476046608e4e0c78c">PSA_ALG_CBC_PKCS7</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04600101)</td></tr>
+<tr class="separator:gaef50d2e9716eb6d476046608e4e0c78c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac2c0e7d21f1b2df5e76bcb4a8f84273c"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CCM</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x06001001)</td></tr>
+<tr class="separator:gac2c0e7d21f1b2df5e76bcb4a8f84273c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0d7d02b15aaae490d38277d99f1c637c"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_GCM</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x06001002)</td></tr>
+<tr class="separator:ga0d7d02b15aaae490d38277d99f1c637c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga575d9082463a06a86c2a22dd63c2e772"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_AEAD_TAG_LENGTH_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x00003f00)</td></tr>
+<tr class="separator:ga575d9082463a06a86c2a22dd63c2e772"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga987d416146048906d40dd1d9572e3193"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_AEAD_TAG_LENGTH_OFFSET</b>&#160;&#160;&#160;8</td></tr>
+<tr class="separator:ga987d416146048906d40dd1d9572e3193"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa63c520b62ab001d54d28801742fc9db"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa63c520b62ab001d54d28801742fc9db">PSA_ALG_AEAD_WITH_TAG_LENGTH</a>(alg,  tag_length)</td></tr>
+<tr class="separator:gaa63c520b62ab001d54d28801742fc9db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaddea507e062250cda8a29407a9480d2b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaddea507e062250cda8a29407a9480d2b">PSA_ALG_AEAD_WITH_DEFAULT_TAG_LENGTH</a>(alg)</td></tr>
+<tr class="separator:gaddea507e062250cda8a29407a9480d2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6e52012ca3be6acb4c756c372f18c3eb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE</b>(alg,  ref)</td></tr>
+<tr class="separator:ga6e52012ca3be6acb4c756c372f18c3eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga819b23c9899e92e9f867c7b2ae8f264c"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_RSA_PKCS1V15_SIGN_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10020000)</td></tr>
+<tr class="separator:ga819b23c9899e92e9f867c7b2ae8f264c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga702ff75385a6ae7d4247033f479439af"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga702ff75385a6ae7d4247033f479439af">PSA_ALG_RSA_PKCS1V15_SIGN</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_RSA_PKCS1V15_SIGN_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga702ff75385a6ae7d4247033f479439af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4215e2a78dcf834e9a625927faa2a817"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga4215e2a78dcf834e9a625927faa2a817">PSA_ALG_RSA_PKCS1V15_SIGN_RAW</a>&#160;&#160;&#160;PSA_ALG_RSA_PKCS1V15_SIGN_BASE</td></tr>
+<tr class="separator:ga4215e2a78dcf834e9a625927faa2a817"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9d545279f23d43b1b2a744d0dd6826d0"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_RSA_PKCS1V15_SIGN</b>(alg)&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PKCS1V15_SIGN_BASE)</td></tr>
+<tr class="separator:ga9d545279f23d43b1b2a744d0dd6826d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga49d39a343790971b7a74644f4faea0c0"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_RSA_PSS_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10030000)</td></tr>
+<tr class="separator:ga49d39a343790971b7a74644f4faea0c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga62152bf4cb4bf6aace5e1be8f143564d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga62152bf4cb4bf6aace5e1be8f143564d">PSA_ALG_RSA_PSS</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_RSA_PSS_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga62152bf4cb4bf6aace5e1be8f143564d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafa04fae7393a76d5161558768cb82a78"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_RSA_PSS</b>(alg)&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PSS_BASE)</td></tr>
+<tr class="separator:gafa04fae7393a76d5161558768cb82a78"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga863284106894476e3a8524805410b55b"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_DSA_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10040000)</td></tr>
+<tr class="separator:ga863284106894476e3a8524805410b55b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9a68efdddff5ae95f104a1416b12742e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga9a68efdddff5ae95f104a1416b12742e">PSA_ALG_DSA</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_DSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga9a68efdddff5ae95f104a1416b12742e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad3800dafc62d6a17bcae4bce98402e68"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_DETERMINISTIC_DSA_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10050000)</td></tr>
+<tr class="separator:gad3800dafc62d6a17bcae4bce98402e68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1d2a96f788cce4f8fc156d13342e70de"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_DSA_DETERMINISTIC_FLAG</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x00010000)</td></tr>
+<tr class="separator:ga1d2a96f788cce4f8fc156d13342e70de"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab8eb98fb6d2e094e47f3b44dfe128f94"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_DETERMINISTIC_DSA</b>(hash_alg)&#160;&#160;&#160;(PSA_ALG_DETERMINISTIC_DSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:gab8eb98fb6d2e094e47f3b44dfe128f94"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacfc3cd50ef0c4bf694cf936079bcbaee"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_DSA</b>(alg)</td></tr>
+<tr class="separator:gacfc3cd50ef0c4bf694cf936079bcbaee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae01ae792228c16eac05102f8e900efd1"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_DSA_IS_DETERMINISTIC</b>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_DSA_DETERMINISTIC_FLAG) != 0)</td></tr>
+<tr class="separator:gae01ae792228c16eac05102f8e900efd1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga11f7d6fe7a4441143ed398420b7d1980"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_DETERMINISTIC_DSA</b>(alg)&#160;&#160;&#160;(PSA_ALG_IS_DSA(alg) &amp;&amp; PSA_ALG_DSA_IS_DETERMINISTIC(alg))</td></tr>
+<tr class="separator:ga11f7d6fe7a4441143ed398420b7d1980"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga474c0582c4726d0c0274e470f4199cf9"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_RANDOMIZED_DSA</b>(alg)&#160;&#160;&#160;(PSA_ALG_IS_DSA(alg) &amp;&amp; !PSA_ALG_DSA_IS_DETERMINISTIC(alg))</td></tr>
+<tr class="separator:ga474c0582c4726d0c0274e470f4199cf9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafd9800fdbe6ea881e0ac0ce03d145928"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_ECDSA_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10060000)</td></tr>
+<tr class="separator:gafd9800fdbe6ea881e0ac0ce03d145928"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7e3ce9f514a227d5ba5d8318870452e3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga7e3ce9f514a227d5ba5d8318870452e3">PSA_ALG_ECDSA</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_ECDSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga7e3ce9f514a227d5ba5d8318870452e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga51d6b6044a62e33cae0cf64bfc3b22a4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga51d6b6044a62e33cae0cf64bfc3b22a4">PSA_ALG_ECDSA_ANY</a>&#160;&#160;&#160;PSA_ALG_ECDSA_BASE</td></tr>
+<tr class="separator:ga51d6b6044a62e33cae0cf64bfc3b22a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6c08b65200140aeb46ee9db9c8ed878c"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_DETERMINISTIC_ECDSA_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10070000)</td></tr>
+<tr class="separator:ga6c08b65200140aeb46ee9db9c8ed878c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga11da566bcd341661c8de921e2ca5ed03"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga11da566bcd341661c8de921e2ca5ed03">PSA_ALG_DETERMINISTIC_ECDSA</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_DETERMINISTIC_ECDSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga11da566bcd341661c8de921e2ca5ed03"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafb92dc138c9d2388033ff5fc1dab7b48"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_ECDSA</b>(alg)</td></tr>
+<tr class="separator:gafb92dc138c9d2388033ff5fc1dab7b48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaced29d8e3a1740aaec01e9ef8211df4f"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_ECDSA_IS_DETERMINISTIC</b>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_DSA_DETERMINISTIC_FLAG) != 0)</td></tr>
+<tr class="separator:gaced29d8e3a1740aaec01e9ef8211df4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacd8766fe0fb8c1e2d32644e0d092c43a"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_DETERMINISTIC_ECDSA</b>(alg)&#160;&#160;&#160;(PSA_ALG_IS_ECDSA(alg) &amp;&amp; PSA_ALG_ECDSA_IS_DETERMINISTIC(alg))</td></tr>
+<tr class="separator:gacd8766fe0fb8c1e2d32644e0d092c43a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae7b0fafebd139f6f815285b7cad622ea"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_RANDOMIZED_ECDSA</b>(alg)&#160;&#160;&#160;(PSA_ALG_IS_ECDSA(alg) &amp;&amp; !PSA_ALG_ECDSA_IS_DETERMINISTIC(alg))</td></tr>
+<tr class="separator:gae7b0fafebd139f6f815285b7cad622ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad8a8ea0536975363b66410cdeafe38b6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gad8a8ea0536975363b66410cdeafe38b6">PSA_ALG_IS_HASH_AND_SIGN</a>(alg)</td></tr>
+<tr class="separator:gad8a8ea0536975363b66410cdeafe38b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga24cf6d7bcd2b9aeeeff86f07b6c674e3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga24cf6d7bcd2b9aeeeff86f07b6c674e3">PSA_ALG_SIGN_GET_HASH</a>(alg)</td></tr>
+<tr class="separator:ga24cf6d7bcd2b9aeeeff86f07b6c674e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4c540d3abe43fb9abcb94f2bc51acef9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga4c540d3abe43fb9abcb94f2bc51acef9">PSA_ALG_RSA_PKCS1V15_CRYPT</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x12020000)</td></tr>
+<tr class="separator:ga4c540d3abe43fb9abcb94f2bc51acef9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga67ba62fbd154f5d3098866ae68ba66eb"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_RSA_OAEP_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x12030000)</td></tr>
+<tr class="separator:ga67ba62fbd154f5d3098866ae68ba66eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa1235dc3fdd9839c6c1b1a9857344c76"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa1235dc3fdd9839c6c1b1a9857344c76">PSA_ALG_RSA_OAEP</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_RSA_OAEP_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:gaa1235dc3fdd9839c6c1b1a9857344c76"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9a85c05fd5c39ca63bbc47fb0755da39"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_RSA_OAEP</b>(alg)&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_OAEP_BASE)</td></tr>
+<tr class="separator:ga9a85c05fd5c39ca63bbc47fb0755da39"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae6b0b87aabe82a1b3113824f022c52e8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_RSA_OAEP_GET_HASH</b>(alg)</td></tr>
+<tr class="separator:gae6b0b87aabe82a1b3113824f022c52e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga85fe668f95a1e65b573dc5acb798be6f"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_HKDF_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x20000100)</td></tr>
+<tr class="separator:ga85fe668f95a1e65b573dc5acb798be6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga32a888fb360e6e25cab8a343772c4a82"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga32a888fb360e6e25cab8a343772c4a82">PSA_ALG_HKDF</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_HKDF_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga32a888fb360e6e25cab8a343772c4a82"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1979d0a76fcee6164cf2e65960f38db2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga1979d0a76fcee6164cf2e65960f38db2">PSA_ALG_IS_HKDF</a>(alg)&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_HKDF_BASE)</td></tr>
+<tr class="separator:ga1979d0a76fcee6164cf2e65960f38db2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga643df48b529b176995927b697ff07a4c"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_HKDF_GET_HASH</b>(hkdf_alg)&#160;&#160;&#160;(PSA_ALG_CATEGORY_HASH | ((hkdf_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga643df48b529b176995927b697ff07a4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadb328698047e32da8e16551b28b50a35"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_TLS12_PRF_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x20000200)</td></tr>
+<tr class="separator:gadb328698047e32da8e16551b28b50a35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6d5623c2ccda1d4a84e34351af8382d5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga6d5623c2ccda1d4a84e34351af8382d5">PSA_ALG_TLS12_PRF</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_TLS12_PRF_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga6d5623c2ccda1d4a84e34351af8382d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa3c18890c50222e5219f40ade8927e66"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa3c18890c50222e5219f40ade8927e66">PSA_ALG_IS_TLS12_PRF</a>(alg)&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_TLS12_PRF_BASE)</td></tr>
+<tr class="separator:gaa3c18890c50222e5219f40ade8927e66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga403b2695655c7e03d6c07c061c606ab7"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_TLS12_PRF_GET_HASH</b>(hkdf_alg)&#160;&#160;&#160;(PSA_ALG_CATEGORY_HASH | ((hkdf_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga403b2695655c7e03d6c07c061c606ab7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaaca4b1953a3f31f1a285a48454aa4a6f"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_TLS12_PSK_TO_MS_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x20000300)</td></tr>
+<tr class="separator:gaaca4b1953a3f31f1a285a48454aa4a6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga039ec797f15d1635d9b2e09a611f8a68"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga039ec797f15d1635d9b2e09a611f8a68">PSA_ALG_TLS12_PSK_TO_MS</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_TLS12_PSK_TO_MS_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga039ec797f15d1635d9b2e09a611f8a68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab25ecc074a93fd11069bedfbba5a287b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gab25ecc074a93fd11069bedfbba5a287b">PSA_ALG_IS_TLS12_PSK_TO_MS</a>(alg)&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_TLS12_PSK_TO_MS_BASE)</td></tr>
+<tr class="separator:gab25ecc074a93fd11069bedfbba5a287b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga49f873d8cf9fb0042118e626330eec9d"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_TLS12_PSK_TO_MS_GET_HASH</b>(hkdf_alg)&#160;&#160;&#160;(PSA_ALG_CATEGORY_HASH | ((hkdf_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga49f873d8cf9fb0042118e626330eec9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga914b52f4be62633b3350c5e03bf32ecb"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_KEY_DERIVATION_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x080fffff)</td></tr>
+<tr class="separator:ga914b52f4be62633b3350c5e03bf32ecb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad39afc70a46a0ed399e3a1b931fd108b"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_KEY_AGREEMENT_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10f00000)</td></tr>
+<tr class="separator:gad39afc70a46a0ed399e3a1b931fd108b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga78bb81cffb87a635c247725eeb2a2682"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga78bb81cffb87a635c247725eeb2a2682">PSA_ALG_KEY_AGREEMENT</a>(ka_alg,  kdf_alg)&#160;&#160;&#160;((ka_alg) | (kdf_alg))</td></tr>
+<tr class="separator:ga78bb81cffb87a635c247725eeb2a2682"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga56c1189add62b59e8e6a28a809b57037"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_KEY_AGREEMENT_GET_KDF</b>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_KEY_DERIVATION_MASK) | PSA_ALG_CATEGORY_KEY_DERIVATION)</td></tr>
+<tr class="separator:ga56c1189add62b59e8e6a28a809b57037"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf837c55ba698b488b6e63300e3470abf"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_KEY_AGREEMENT_GET_BASE</b>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_KEY_AGREEMENT_MASK) | PSA_ALG_CATEGORY_KEY_AGREEMENT)</td></tr>
+<tr class="separator:gaf837c55ba698b488b6e63300e3470abf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa40ab362ce141ce541d69b2eb1f41438"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_RAW_KEY_AGREEMENT</b>(alg)&#160;&#160;&#160;(PSA_ALG_KEY_AGREEMENT_GET_KDF(alg) == PSA_ALG_CATEGORY_KEY_DERIVATION)</td></tr>
+<tr class="separator:gaa40ab362ce141ce541d69b2eb1f41438"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga14529588c008091de0ad2716170dbd48"><td class="memItemLeft" align="right" valign="top">
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_KEY_DERIVATION_OR_AGREEMENT</b>(alg)&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gaf8b90c648aa53dbd06c236695e300cd0">PSA_ALG_IS_KEY_DERIVATION</a>(alg) || <a class="el" href="group__crypto__types.html#ga59753742cb06553bd22751bbef472b6f">PSA_ALG_IS_KEY_AGREEMENT</a>(alg)))</td></tr>
+<tr class="separator:ga14529588c008091de0ad2716170dbd48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0ebbb6f93a05b6511e6f108ffd2d1eb4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga0ebbb6f93a05b6511e6f108ffd2d1eb4">PSA_ALG_FFDH</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x30100000)</td></tr>
+<tr class="separator:ga0ebbb6f93a05b6511e6f108ffd2d1eb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa3cf76164cd9375af4fb8a291078a19e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa3cf76164cd9375af4fb8a291078a19e">PSA_ALG_IS_FFDH</a>(alg)&#160;&#160;&#160;(PSA_ALG_KEY_AGREEMENT_GET_BASE(alg) == <a class="el" href="group__crypto__types.html#ga0ebbb6f93a05b6511e6f108ffd2d1eb4">PSA_ALG_FFDH</a>)</td></tr>
+<tr class="separator:gaa3cf76164cd9375af4fb8a291078a19e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab2dbcf71b63785e7dd7b54a100edee43"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gab2dbcf71b63785e7dd7b54a100edee43">PSA_ALG_ECDH</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x30200000)</td></tr>
+<tr class="separator:gab2dbcf71b63785e7dd7b54a100edee43"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9d9b6533d2a6bea7bac7ae01facb820d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga9d9b6533d2a6bea7bac7ae01facb820d">PSA_ALG_IS_ECDH</a>(alg)&#160;&#160;&#160;(PSA_ALG_KEY_AGREEMENT_GET_BASE(alg) == <a class="el" href="group__crypto__types.html#gab2dbcf71b63785e7dd7b54a100edee43">PSA_ALG_ECDH</a>)</td></tr>
+<tr class="separator:ga9d9b6533d2a6bea7bac7ae01facb820d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacf83d7430e82b97cecb8b26ca6fa1426"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gacf83d7430e82b97cecb8b26ca6fa1426">PSA_ALG_IS_WILDCARD</a>(alg)</td></tr>
+<tr class="separator:gacf83d7430e82b97cecb8b26ca6fa1426"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacf83d7430e82b97cecb8b26ca6fa1426"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gacf83d7430e82b97cecb8b26ca6fa1426">PSA_ALG_IS_WILDCARD</a>(alg)</td></tr>
+<tr class="separator:gacf83d7430e82b97cecb8b26ca6fa1426"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8b438870ba69489b685730d346455108"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__lifetimes.html#ga8b438870ba69489b685730d346455108">PSA_KEY_LIFETIME_VOLATILE</a>&#160;&#160;&#160;((<a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a>)0x00000000)</td></tr>
+<tr class="separator:ga8b438870ba69489b685730d346455108"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3713a01c5fcd5f7eae46ff22ceaf6d02"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__lifetimes.html#ga3713a01c5fcd5f7eae46ff22ceaf6d02">PSA_KEY_LIFETIME_PERSISTENT</a>&#160;&#160;&#160;((<a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a>)0x00000001)</td></tr>
+<tr class="separator:ga3713a01c5fcd5f7eae46ff22ceaf6d02"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7dddccdd1303176e87a4d20c87b589ed"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga7dddccdd1303176e87a4d20c87b589ed">PSA_KEY_USAGE_EXPORT</a>&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000001)</td></tr>
+<tr class="separator:ga7dddccdd1303176e87a4d20c87b589ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga75153b296d045d529d97203a6a995dad"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga75153b296d045d529d97203a6a995dad">PSA_KEY_USAGE_ENCRYPT</a>&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000100)</td></tr>
+<tr class="separator:ga75153b296d045d529d97203a6a995dad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac3f2d2e5983db1edde9f142ca9bf8e6a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#gac3f2d2e5983db1edde9f142ca9bf8e6a">PSA_KEY_USAGE_DECRYPT</a>&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000200)</td></tr>
+<tr class="separator:gac3f2d2e5983db1edde9f142ca9bf8e6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga99b9f456cf59efc4b5579465407aef5a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga99b9f456cf59efc4b5579465407aef5a">PSA_KEY_USAGE_SIGN</a>&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000400)</td></tr>
+<tr class="separator:ga99b9f456cf59efc4b5579465407aef5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga39b54ffd5958b69634607924fa53cea6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga39b54ffd5958b69634607924fa53cea6">PSA_KEY_USAGE_VERIFY</a>&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000800)</td></tr>
+<tr class="separator:ga39b54ffd5958b69634607924fa53cea6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf19022acc5ef23cf12477f632b48a0b2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#gaf19022acc5ef23cf12477f632b48a0b2">PSA_KEY_USAGE_DERIVE</a>&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00001000)</td></tr>
+<tr class="separator:gaf19022acc5ef23cf12477f632b48a0b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga90a1995a41e26ed5ca30d2d4641d1168"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#ga90a1995a41e26ed5ca30d2d4641d1168">PSA_KDF_STEP_SECRET</a>&#160;&#160;&#160;((<a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a>)0x0101)</td></tr>
+<tr class="separator:ga90a1995a41e26ed5ca30d2d4641d1168"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9f4da10191bcb690b88756ed8470b03c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#ga9f4da10191bcb690b88756ed8470b03c">PSA_KDF_STEP_LABEL</a>&#160;&#160;&#160;((<a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a>)0x0201)</td></tr>
+<tr class="separator:ga9f4da10191bcb690b88756ed8470b03c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga384777dac55791d8f3a1af72c847b327"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#ga384777dac55791d8f3a1af72c847b327">PSA_KDF_STEP_SALT</a>&#160;&#160;&#160;((<a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a>)0x0202)</td></tr>
+<tr class="separator:ga384777dac55791d8f3a1af72c847b327"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga836afe760bbda3dafc6c29631560b1a0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#ga836afe760bbda3dafc6c29631560b1a0">PSA_KDF_STEP_INFO</a>&#160;&#160;&#160;((<a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a>)0x0203)</td></tr>
+<tr class="separator:ga836afe760bbda3dafc6c29631560b1a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>PSA cryptography module: macros to build and analyze integer values. </p>
+<dl class="section note"><dt>Note</dt><dd>This file may not be included directly. Applications must include <a class="el" href="crypto_8h.html" title="Platform Security Architecture cryptography module. ">psa/crypto.h</a>. Drivers must include the appropriate driver header file.</dd></dl>
+<p>This file contains portable definitions of macros to build and analyze values of integral types that encode properties of cryptographic keys, designations of cryptographic algorithms, and error codes returned by the library.</p>
+<p>This header file only defines preprocessor macros. </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/crypto__values_8h__dep__incl.map b/docs/html/crypto__values_8h__dep__incl.map
new file mode 100644
index 0000000..654328e
--- /dev/null
+++ b/docs/html/crypto__values_8h__dep__incl.map
@@ -0,0 +1,3 @@
+<map id="psa/crypto_values.h" name="psa/crypto_values.h">
+<area shape="rect" id="node2" href="$crypto_8h.html" title="Platform Security Architecture cryptography module. " alt="" coords="27,80,122,107"/>
+</map>
diff --git a/docs/html/crypto__values_8h__dep__incl.md5 b/docs/html/crypto__values_8h__dep__incl.md5
new file mode 100644
index 0000000..e8f7acd
--- /dev/null
+++ b/docs/html/crypto__values_8h__dep__incl.md5
@@ -0,0 +1 @@
+683c96d3969716390891af2081e47531
\ No newline at end of file
diff --git a/docs/html/crypto__values_8h__dep__incl.png b/docs/html/crypto__values_8h__dep__incl.png
new file mode 100644
index 0000000..097506e
--- /dev/null
+++ b/docs/html/crypto__values_8h__dep__incl.png
Binary files differ
diff --git a/docs/html/crypto__values_8h_source.html b/docs/html/crypto__values_8h_source.html
new file mode 100644
index 0000000..ee7693b
--- /dev/null
+++ b/docs/html/crypto__values_8h_source.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: psa/crypto_values.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_7dae9cfde651cd3cb034485ce5e391b9.html">psa</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">crypto_values.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="crypto__values_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> *  Copyright (C) 2018, ARM Limited, All Rights Reserved</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> *  SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> *  Licensed under the Apache License, Version 2.0 (the &quot;License&quot;); you may</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> *  not use this file except in compliance with the License.</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> *  You may obtain a copy of the License at</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> *  http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> *  Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment"> *  distributed under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"> *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment"> *  See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment"> *  limitations under the License.</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment"> *  This file is part of mbed TLS (https://tls.mbed.org)</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor">#ifndef PSA_CRYPTO_VALUES_H</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="preprocessor">#define PSA_CRYPTO_VALUES_H</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="preprocessor">#if !defined(PSA_SUCCESS)</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment">/* If PSA_SUCCESS is defined, assume that PSA crypto is being used</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment"> * together with PSA IPC, which also defines the identifier</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment"> * PSA_SUCCESS. We must not define PSA_SUCCESS ourselves in that case;</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment"> * the other error code names don&#39;t clash. This is a temporary hack</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="comment"> * until we unify error reporting in PSA IPC and PSA crypto.</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="comment"> * Note that psa_defs.h must be included before this header!</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">   53</a></span>&#160;<span class="preprocessor">#define PSA_SUCCESS ((psa_status_t)0)</span></div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* !defined(PSA_SUCCESS) */</span><span class="preprocessor"></span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="group__error.html#ga24d5fdcdd759f846f79d9e581c63a83f">   61</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_UNKNOWN_ERROR         ((psa_status_t)1)</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">   70</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_NOT_SUPPORTED         ((psa_status_t)2)</span></div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">   83</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_NOT_PERMITTED         ((psa_status_t)3)</span></div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">   95</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_BUFFER_TOO_SMALL      ((psa_status_t)4)</span></div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="group__error.html#gac2fee3a51249fbea45360aaa911f3e58">  103</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_OCCUPIED_SLOT         ((psa_status_t)5)</span></div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">  111</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_EMPTY_SLOT            ((psa_status_t)6)</span></div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">  123</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_BAD_STATE             ((psa_status_t)7)</span></div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">  139</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_INVALID_ARGUMENT      ((psa_status_t)8)</span></div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">  145</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_INSUFFICIENT_MEMORY   ((psa_status_t)9)</span></div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="group__error.html#ga897a45eb206a6f6b7be7ffbe36f0d766">  154</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_INSUFFICIENT_STORAGE  ((psa_status_t)10)</span></div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">  171</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_COMMUNICATION_FAILURE ((psa_status_t)11)</span></div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;</div><div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="group__error.html#gadd169a1af2707862b95fb9df91dfc37d">  196</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_STORAGE_FAILURE       ((psa_status_t)12)</span></div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno"><a class="line" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">  202</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_HARDWARE_FAILURE      ((psa_status_t)13)</span></div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">  233</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_TAMPERING_DETECTED    ((psa_status_t)14)</span></div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="group__error.html#ga4deb59fec02297ec5d8b42178323f675">  252</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_INSUFFICIENT_ENTROPY  ((psa_status_t)15)</span></div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;</div><div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="group__error.html#ga35927f755d232c4766de600f2c49e9f2">  262</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_INVALID_SIGNATURE     ((psa_status_t)16)</span></div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno"><a class="line" href="group__error.html#gabe29594edbfb152cf153975b0597ac48">  278</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_INVALID_PADDING       ((psa_status_t)17)</span></div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="group__error.html#gaf1fa61f72e9e5b4a848c991bea495767">  284</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_INSUFFICIENT_CAPACITY ((psa_status_t)18)</span></div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="group__error.html#gadf22718935657c2c3168c228204085f9">  288</a></span>&#160;<span class="preprocessor">#define PSA_ERROR_INVALID_HANDLE        ((psa_status_t)19)</span></div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gafce7ab2b54ce97ea5bff73f13a9f3e5b">  300</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_NONE                       ((psa_key_type_t)0x00000000)</span></div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga8dbaed2fdb1ebae8aa127ad3988516f7">  309</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_VENDOR_FLAG                ((psa_key_type_t)0x80000000)</span></div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_CATEGORY_MASK              ((psa_key_type_t)0x70000000)</span></div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_CATEGORY_SYMMETRIC         ((psa_key_type_t)0x40000000)</span></div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_CATEGORY_RAW               ((psa_key_type_t)0x50000000)</span></div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY        ((psa_key_type_t)0x60000000)</span></div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_CATEGORY_KEY_PAIR          ((psa_key_type_t)0x70000000)</span></div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_CATEGORY_FLAG_PAIR         ((psa_key_type_t)0x10000000)</span></div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gadbe4c086a6562aefe344bc79e51bdfd3">  320</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_VENDOR_DEFINED(type) \</span></div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;<span class="preprocessor">    (((type) &amp; PSA_KEY_TYPE_VENDOR_FLAG) != 0)</span></div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;</div><div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaef86ce4e810e1c2c76068ac874bfef54">  327</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_UNSTRUCTURED(type) \</span></div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;<span class="preprocessor">    (((type) &amp; PSA_KEY_TYPE_CATEGORY_MASK &amp; ~(psa_key_type_t)0x10000000) == \</span></div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;<span class="preprocessor">     PSA_KEY_TYPE_CATEGORY_SYMMETRIC)</span></div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gab138ae2ebf2905dfbaf4154db2620939">  332</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_ASYMMETRIC(type)                                \</span></div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;<span class="preprocessor">    (((type) &amp; PSA_KEY_TYPE_CATEGORY_MASK                               \</span></div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;<span class="preprocessor">      &amp; ~PSA_KEY_TYPE_CATEGORY_FLAG_PAIR) ==                            \</span></div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;<span class="preprocessor">     PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY)</span></div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;</div><div class="line"><a name="l00337"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gac674a0f059bc0cb72b47f0c517b4f45b">  337</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_PUBLIC_KEY(type)                                \</span></div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;<span class="preprocessor">    (((type) &amp; PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY)</span></div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;</div><div class="line"><a name="l00341"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gac14c6d6e1b2b7f4a92a7b757465cff29">  341</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_KEYPAIR(type)                                   \</span></div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;<span class="preprocessor">    (((type) &amp; PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_KEY_PAIR)</span></div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;</div><div class="line"><a name="l00353"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaf09f1ca1de6a7e7cff0fe516f3f6c91d">  353</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_KEYPAIR_OF_PUBLIC_KEY(type)        \</span></div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;<span class="preprocessor">    ((type) | PSA_KEY_TYPE_CATEGORY_FLAG_PAIR)</span></div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;</div><div class="line"><a name="l00365"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">  365</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR(type)        \</span></div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;<span class="preprocessor">    ((type) &amp; ~PSA_KEY_TYPE_CATEGORY_FLAG_PAIR)</span></div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;</div><div class="line"><a name="l00372"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaa97f92025533102616b32d571c940d80">  372</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_RAW_DATA                   ((psa_key_type_t)0x50000001)</span></div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;</div><div class="line"><a name="l00382"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga92d989f4ca64abd00f463defd773a6f8">  382</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_HMAC                       ((psa_key_type_t)0x51000000)</span></div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;</div><div class="line"><a name="l00389"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gae871b2357b8593f33bfd51abbf93ebb1">  389</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_DERIVE                     ((psa_key_type_t)0x52000000)</span></div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;</div><div class="line"><a name="l00396"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga6ee54579dcf278c677eda4bb1a29575e">  396</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_AES                        ((psa_key_type_t)0x40000001)</span></div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;</div><div class="line"><a name="l00407"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga577562bfbbc691c820d55ec308333138">  407</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_DES                        ((psa_key_type_t)0x40000002)</span></div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;</div><div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gad8e5da742343fd5519f9d8a630c2ed81">  411</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_CAMELLIA                   ((psa_key_type_t)0x40000003)</span></div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;</div><div class="line"><a name="l00417"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gae4d46e83f910dcaa126000a8ed03cde9">  417</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_ARC4                       ((psa_key_type_t)0x40000004)</span></div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga9ba0878f56c8bcd1995ac017a74f513b">  420</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_RSA_PUBLIC_KEY             ((psa_key_type_t)0x60010000)</span></div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;</div><div class="line"><a name="l00422"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga581f50687f5d650456925278948f2799">  422</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_RSA_KEYPAIR                ((psa_key_type_t)0x70010000)</span></div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;</div><div class="line"><a name="l00424"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga0e1d8f241228e49c9cadadfb4579ef1a">  424</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_RSA(type)                                       \</span></div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;<span class="preprocessor">    (PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR(type) == PSA_KEY_TYPE_RSA_PUBLIC_KEY)</span></div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;</div><div class="line"><a name="l00428"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga5e7439c2905136366c3a876e62e5ddfc">  428</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_DSA_PUBLIC_KEY             ((psa_key_type_t)0x60020000)</span></div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;</div><div class="line"><a name="l00430"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga011010ee28c20388f3d89fb27088ed62">  430</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_DSA_KEYPAIR                ((psa_key_type_t)0x70020000)</span></div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;</div><div class="line"><a name="l00432"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga273fdfcf23eb0624f8b63d2321cf95c1">  432</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_DSA(type)                                       \</span></div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;<span class="preprocessor">    (PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR(type) == PSA_KEY_TYPE_DSA_PUBLIC_KEY)</span></div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE        ((psa_key_type_t)0x60030000)</span></div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_ECC_KEYPAIR_BASE           ((psa_key_type_t)0x70030000)</span></div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_ECC_CURVE_MASK             ((psa_key_type_t)0x0000ffff)</span></div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;</div><div class="line"><a name="l00439"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gadf3ad65d157bf5282849c954bf3f51af">  439</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_ECC_KEYPAIR(curve)         \</span></div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;<span class="preprocessor">    (PSA_KEY_TYPE_ECC_KEYPAIR_BASE | (curve))</span></div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;</div><div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gad54c03d3b47020e571a72cd01d978cf2">  442</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_ECC_PUBLIC_KEY(curve)              \</span></div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;<span class="preprocessor">    (PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE | (curve))</span></div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;</div><div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga88e01fa06b585654689a99bcc06bbe66">  446</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_ECC(type)                                       \</span></div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;<span class="preprocessor">    ((PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR(type) &amp;                        \</span></div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;<span class="preprocessor">      ~PSA_KEY_TYPE_ECC_CURVE_MASK) == PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE)</span></div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;</div><div class="line"><a name="l00450"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga7bf101b671e8cf26f4cb08fcb679db4b">  450</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_ECC_KEYPAIR(type)                               \</span></div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;<span class="preprocessor">    (((type) &amp; ~PSA_KEY_TYPE_ECC_CURVE_MASK) ==                         \</span></div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;<span class="preprocessor">     PSA_KEY_TYPE_ECC_KEYPAIR_BASE)</span></div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;</div><div class="line"><a name="l00454"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga5af146a173b0c84d7e737e2fb6a3c0a7">  454</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY(type)                            \</span></div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;<span class="preprocessor">    (((type) &amp; ~PSA_KEY_TYPE_ECC_CURVE_MASK) ==                         \</span></div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;<span class="preprocessor">     PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE)</span></div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;</div><div class="line"><a name="l00459"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga0c567210e6f80aa8f2aa87efa7a3a3f9">  459</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_GET_CURVE(type)                             \</span></div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;<span class="preprocessor">    ((psa_ecc_curve_t) (PSA_KEY_TYPE_IS_ECC(type) ?              \</span></div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;<span class="preprocessor">                        ((type) &amp; PSA_KEY_TYPE_ECC_CURVE_MASK) : \</span></div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;<span class="preprocessor">                        0))</span></div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;<span class="comment">/* The encoding of curve identifiers is currently aligned with the</span></div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;<span class="comment"> * TLS Supported Groups Registry (formerly known as the</span></div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;<span class="comment"> * TLS EC Named Curve Registry)</span></div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;<span class="comment"> * https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-8</span></div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;<span class="comment"> * The values are defined by RFC 8422 and RFC 7027. */</span></div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT163K1         ((psa_ecc_curve_t) 0x0001)</span></div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT163R1         ((psa_ecc_curve_t) 0x0002)</span></div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT163R2         ((psa_ecc_curve_t) 0x0003)</span></div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT193R1         ((psa_ecc_curve_t) 0x0004)</span></div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT193R2         ((psa_ecc_curve_t) 0x0005)</span></div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT233K1         ((psa_ecc_curve_t) 0x0006)</span></div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT233R1         ((psa_ecc_curve_t) 0x0007)</span></div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT239K1         ((psa_ecc_curve_t) 0x0008)</span></div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT283K1         ((psa_ecc_curve_t) 0x0009)</span></div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT283R1         ((psa_ecc_curve_t) 0x000a)</span></div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT409K1         ((psa_ecc_curve_t) 0x000b)</span></div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT409R1         ((psa_ecc_curve_t) 0x000c)</span></div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT571K1         ((psa_ecc_curve_t) 0x000d)</span></div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECT571R1         ((psa_ecc_curve_t) 0x000e)</span></div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP160K1         ((psa_ecc_curve_t) 0x000f)</span></div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP160R1         ((psa_ecc_curve_t) 0x0010)</span></div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP160R2         ((psa_ecc_curve_t) 0x0011)</span></div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP192K1         ((psa_ecc_curve_t) 0x0012)</span></div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP192R1         ((psa_ecc_curve_t) 0x0013)</span></div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP224K1         ((psa_ecc_curve_t) 0x0014)</span></div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP224R1         ((psa_ecc_curve_t) 0x0015)</span></div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP256K1         ((psa_ecc_curve_t) 0x0016)</span></div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP256R1         ((psa_ecc_curve_t) 0x0017)</span></div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP384R1         ((psa_ecc_curve_t) 0x0018)</span></div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_SECP521R1         ((psa_ecc_curve_t) 0x0019)</span></div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_BRAINPOOL_P256R1  ((psa_ecc_curve_t) 0x001a)</span></div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_BRAINPOOL_P384R1  ((psa_ecc_curve_t) 0x001b)</span></div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_BRAINPOOL_P512R1  ((psa_ecc_curve_t) 0x001c)</span></div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_CURVE25519        ((psa_ecc_curve_t) 0x001d)</span></div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;<span class="preprocessor">#define PSA_ECC_CURVE_CURVE448          ((psa_ecc_curve_t) 0x001e)</span></div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;</div><div class="line"><a name="l00501"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga325a340d7c72d99d3a678eb210bf6e0a">  501</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_DH_PUBLIC_KEY             ((psa_key_type_t)0x60040000)</span></div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;</div><div class="line"><a name="l00503"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga39b63c6b97a62a316c0660bf72b2fdd5">  503</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_DH_KEYPAIR                ((psa_key_type_t)0x70040000)</span></div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;</div><div class="line"><a name="l00506"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga248ae35c0e2becaebbf479fc1c3a3b0e">  506</a></span>&#160;<span class="preprocessor">#define PSA_KEY_TYPE_IS_DH(type)                                       \</span></div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;<span class="preprocessor">    (PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR(type) == PSA_KEY_TYPE_DH_PUBLIC_KEY)</span></div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;</div><div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gacaa366bdeb0413e63e87a667c5457b2e">  527</a></span>&#160;<span class="preprocessor">#define PSA_BLOCK_CIPHER_BLOCK_SIZE(type)            \</span></div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;<span class="preprocessor">    (                                                \</span></div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;<span class="preprocessor">        (type) == PSA_KEY_TYPE_AES ? 16 :            \</span></div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;<span class="preprocessor">        (type) == PSA_KEY_TYPE_DES ? 8 :             \</span></div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;<span class="preprocessor">        (type) == PSA_KEY_TYPE_CAMELLIA ? 16 :       \</span></div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;<span class="preprocessor">        (type) == PSA_KEY_TYPE_ARC4 ? 1 :            \</span></div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;<span class="preprocessor">        0)</span></div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;<span class="preprocessor">#define PSA_ALG_VENDOR_FLAG                     ((psa_algorithm_t)0x80000000)</span></div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_MASK                   ((psa_algorithm_t)0x7f000000)</span></div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_HASH                   ((psa_algorithm_t)0x01000000)</span></div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_MAC                    ((psa_algorithm_t)0x02000000)</span></div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_CIPHER                 ((psa_algorithm_t)0x04000000)</span></div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_AEAD                   ((psa_algorithm_t)0x06000000)</span></div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_SIGN                   ((psa_algorithm_t)0x10000000)</span></div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION  ((psa_algorithm_t)0x12000000)</span></div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_KEY_DERIVATION         ((psa_algorithm_t)0x20000000)</span></div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;<span class="preprocessor">#define PSA_ALG_CATEGORY_KEY_AGREEMENT          ((psa_algorithm_t)0x30000000)</span></div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_VENDOR_DEFINED(alg)                                  \</span></div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_VENDOR_FLAG) != 0)</span></div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;</div><div class="line"><a name="l00557"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">  557</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_HASH(alg)                                            \</span></div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_HASH)</span></div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;</div><div class="line"><a name="l00568"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaca7aee4c9dde316b3b1a150a26eab776">  568</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_MAC(alg)                                             \</span></div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_MAC)</span></div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;</div><div class="line"><a name="l00579"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga1d1a5a402ad89a2e68f12bfb535490eb">  579</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_CIPHER(alg)                                          \</span></div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_CIPHER)</span></div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;</div><div class="line"><a name="l00591"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">  591</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_AEAD(alg)                                            \</span></div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_AEAD)</span></div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;</div><div class="line"><a name="l00602"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga6d490d0904e0698f6c1268a89d72ff31">  602</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_SIGN(alg)                                            \</span></div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_SIGN)</span></div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;</div><div class="line"><a name="l00613"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga41d2ee937d54efd76bd54a97b2ebc08a">  613</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_ASYMMETRIC_ENCRYPTION(alg)                           \</span></div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION)</span></div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;<span class="preprocessor">#define PSA_ALG_KEY_SELECTION_FLAG              ((psa_algorithm_t)0x01000000)</span></div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;</div><div class="line"><a name="l00625"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga59753742cb06553bd22751bbef472b6f">  625</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_KEY_AGREEMENT(alg)                                   \</span></div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_CATEGORY_MASK &amp; ~PSA_ALG_KEY_SELECTION_FLAG) ==   \</span></div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;<span class="preprocessor">     PSA_ALG_CATEGORY_KEY_AGREEMENT)</span></div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;</div><div class="line"><a name="l00637"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaf8b90c648aa53dbd06c236695e300cd0">  637</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_KEY_DERIVATION(alg)                                  \</span></div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_KEY_DERIVATION)</span></div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;</div><div class="line"><a name="l00648"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga51b1834ee5e98c6a83c2cfc7699f9077">  648</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_KEY_SELECTION(alg)                                   \</span></div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_KEY_SELECTION)</span></div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;<span class="preprocessor">#define PSA_ALG_HASH_MASK                       ((psa_algorithm_t)0x000000ff)</span></div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;<span class="preprocessor">#define PSA_ALG_MD2                             ((psa_algorithm_t)0x01000001)</span></div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;<span class="preprocessor">#define PSA_ALG_MD4                             ((psa_algorithm_t)0x01000002)</span></div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;<span class="preprocessor">#define PSA_ALG_MD5                             ((psa_algorithm_t)0x01000003)</span></div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;<span class="preprocessor">#define PSA_ALG_RIPEMD160                       ((psa_algorithm_t)0x01000004)</span></div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;<span class="preprocessor">#define PSA_ALG_SHA_1                           ((psa_algorithm_t)0x01000005)</span></div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;</div><div class="line"><a name="l00659"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga25d6a3244d10a7148fe6b026d1979f7b">  659</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA_224                         ((psa_algorithm_t)0x01000008)</span></div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;</div><div class="line"><a name="l00661"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga619471f978e13cdd0a1e37145e4bf341">  661</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA_256                         ((psa_algorithm_t)0x01000009)</span></div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;</div><div class="line"><a name="l00663"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga58af64dd9a86a287e8da9ed7739eead4">  663</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA_384                         ((psa_algorithm_t)0x0100000a)</span></div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;</div><div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gafba3ae409f46d3dd7f37a0910660c3e9">  665</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA_512                         ((psa_algorithm_t)0x0100000b)</span></div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;</div><div class="line"><a name="l00667"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga3fe2d7c3c80e3186ca78d16a35d5d931">  667</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA_512_224                     ((psa_algorithm_t)0x0100000c)</span></div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;</div><div class="line"><a name="l00669"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga5910b3964c14e9613e8643a45b09c2d4">  669</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA_512_256                     ((psa_algorithm_t)0x0100000d)</span></div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;</div><div class="line"><a name="l00671"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga16f5fe34ccce68c2fada1224c054a999">  671</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA3_224                        ((psa_algorithm_t)0x01000010)</span></div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;</div><div class="line"><a name="l00673"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaace70d9515489bbe3c5e7ac1b7d9155b">  673</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA3_256                        ((psa_algorithm_t)0x01000011)</span></div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;</div><div class="line"><a name="l00675"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gab0f079257ea75e2acfe2fc3b38c78cd8">  675</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA3_384                        ((psa_algorithm_t)0x01000012)</span></div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;</div><div class="line"><a name="l00677"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga37e5dbe936dddb155e76f2997de27188">  677</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SHA3_512                        ((psa_algorithm_t)0x01000013)</span></div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;</div><div class="line"><a name="l00712"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaa1288ea8bd397a8a3f5e19e94110f2e4">  712</a></span>&#160;<span class="preprocessor">#define PSA_ALG_ANY_HASH                        ((psa_algorithm_t)0x010000ff)</span></div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;</div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;<span class="preprocessor">#define PSA_ALG_MAC_SUBCATEGORY_MASK            ((psa_algorithm_t)0x00c00000)</span></div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;<span class="preprocessor">#define PSA_ALG_HMAC_BASE                       ((psa_algorithm_t)0x02800000)</span></div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;</div><div class="line"><a name="l00727"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga70f397425684b3efcde1e0e34c28261f">  727</a></span>&#160;<span class="preprocessor">#define PSA_ALG_HMAC(hash_alg)                                  \</span></div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;<span class="preprocessor">    (PSA_ALG_HMAC_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;<span class="preprocessor">#define PSA_ALG_HMAC_GET_HASH(hmac_alg)                             \</span></div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;<span class="preprocessor">    (PSA_ALG_CATEGORY_HASH | ((hmac_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;</div><div class="line"><a name="l00743"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga4a050c3c3cbc6eb96418f18847601c8a">  743</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_HMAC(alg)                                            \</span></div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;<span class="preprocessor">    (((alg) &amp; (PSA_ALG_CATEGORY_MASK | PSA_ALG_MAC_SUBCATEGORY_MASK)) == \</span></div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;<span class="preprocessor">     PSA_ALG_HMAC_BASE)</span></div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;<span class="comment">/* In the encoding of a MAC algorithm, the bits corresponding to</span></div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;<span class="comment"> * PSA_ALG_MAC_TRUNCATION_MASK encode the length to which the MAC is</span></div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;<span class="comment"> * truncated. As an exception, the value 0 means the untruncated algorithm,</span></div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;<span class="comment"> * whatever its length is. The length is encoded in 6 bits, so it can</span></div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;<span class="comment"> * reach up to 63; the largest MAC is 64 bytes so its trivial truncation</span></div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;<span class="comment"> * to full length is correctly encoded as 0 and any non-trivial truncation</span></div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;<span class="comment"> * is correctly encoded as a value between 1 and 63. */</span></div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;<span class="preprocessor">#define PSA_ALG_MAC_TRUNCATION_MASK             ((psa_algorithm_t)0x00003f00)</span></div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;<span class="preprocessor">#define PSA_MAC_TRUNCATION_OFFSET 8</span></div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;</div><div class="line"><a name="l00790"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaf36137110baf7bb13c5028fd62c64276">  790</a></span>&#160;<span class="preprocessor">#define PSA_ALG_TRUNCATED_MAC(alg, mac_length)                          \</span></div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_MAC_TRUNCATION_MASK) |                           \</span></div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;<span class="preprocessor">     ((mac_length) &lt;&lt; PSA_MAC_TRUNCATION_OFFSET &amp; PSA_ALG_MAC_TRUNCATION_MASK))</span></div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;</div><div class="line"><a name="l00806"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaa05a8d99634f3350597ac9284fb70cb1">  806</a></span>&#160;<span class="preprocessor">#define PSA_ALG_FULL_LENGTH_MAC(alg)            \</span></div><div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;<span class="preprocessor">    ((alg) &amp; ~PSA_ALG_MAC_TRUNCATION_MASK)</span></div><div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;</div><div class="line"><a name="l00820"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gab03726c4476174e019a08e2a04018ce8">  820</a></span>&#160;<span class="preprocessor">#define PSA_MAC_TRUNCATED_LENGTH(alg)           \</span></div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_MAC_TRUNCATION_MASK) &gt;&gt; PSA_MAC_TRUNCATION_OFFSET)</span></div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;<span class="preprocessor">#define PSA_ALG_CIPHER_MAC_BASE                 ((psa_algorithm_t)0x02c00000)</span></div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;<span class="preprocessor">#define PSA_ALG_CBC_MAC                         ((psa_algorithm_t)0x02c00001)</span></div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;<span class="preprocessor">#define PSA_ALG_CMAC                            ((psa_algorithm_t)0x02c00002)</span></div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;<span class="preprocessor">#define PSA_ALG_GMAC                            ((psa_algorithm_t)0x02c00003)</span></div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;</div><div class="line"><a name="l00836"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gae49d1eb601125d65a5c5b252aa45479e">  836</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_BLOCK_CIPHER_MAC(alg)                                \</span></div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;<span class="preprocessor">    (((alg) &amp; (PSA_ALG_CATEGORY_MASK | PSA_ALG_MAC_SUBCATEGORY_MASK)) == \</span></div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;<span class="preprocessor">     PSA_ALG_CIPHER_MAC_BASE)</span></div><div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;</div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;<span class="preprocessor">#define PSA_ALG_CIPHER_STREAM_FLAG              ((psa_algorithm_t)0x00800000)</span></div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;<span class="preprocessor">#define PSA_ALG_CIPHER_FROM_BLOCK_FLAG          ((psa_algorithm_t)0x00400000)</span></div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;</div><div class="line"><a name="l00855"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gacfec68e0c6175e02e1b2ebc97df383c0">  855</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_STREAM_CIPHER(alg)            \</span></div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;<span class="preprocessor">    (((alg) &amp; (PSA_ALG_CATEGORY_MASK | PSA_ALG_CIPHER_STREAM_FLAG)) == \</span></div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;<span class="preprocessor">        (PSA_ALG_CATEGORY_CIPHER | PSA_ALG_CIPHER_STREAM_FLAG))</span></div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;</div><div class="line"><a name="l00861"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gab6a5284decb0e5e1b5b8740a41ef3c5e">  861</a></span>&#160;<span class="preprocessor">#define PSA_ALG_ARC4                            ((psa_algorithm_t)0x04800001)</span></div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;</div><div class="line"><a name="l00870"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gad318309706a769cffdc64e4c7e06b2e9">  870</a></span>&#160;<span class="preprocessor">#define PSA_ALG_CTR                             ((psa_algorithm_t)0x04c00001)</span></div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;</div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;<span class="preprocessor">#define PSA_ALG_CFB                             ((psa_algorithm_t)0x04c00002)</span></div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;</div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;<span class="preprocessor">#define PSA_ALG_OFB                             ((psa_algorithm_t)0x04c00003)</span></div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;</div><div class="line"><a name="l00882"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaa722c0e426a797fd6d99623f59748125">  882</a></span>&#160;<span class="preprocessor">#define PSA_ALG_XTS                             ((psa_algorithm_t)0x044000ff)</span></div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;</div><div class="line"><a name="l00891"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gacb332d72716958880ee7f97d8365ae66">  891</a></span>&#160;<span class="preprocessor">#define PSA_ALG_CBC_NO_PADDING                  ((psa_algorithm_t)0x04600100)</span></div><div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;</div><div class="line"><a name="l00899"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaef50d2e9716eb6d476046608e4e0c78c">  899</a></span>&#160;<span class="preprocessor">#define PSA_ALG_CBC_PKCS7                       ((psa_algorithm_t)0x04600101)</span></div><div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;</div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;<span class="preprocessor">#define PSA_ALG_CCM                             ((psa_algorithm_t)0x06001001)</span></div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;<span class="preprocessor">#define PSA_ALG_GCM                             ((psa_algorithm_t)0x06001002)</span></div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;</div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;<span class="comment">/* In the encoding of a AEAD algorithm, the bits corresponding to</span></div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;<span class="comment"> * PSA_ALG_AEAD_TAG_LENGTH_MASK encode the length of the AEAD tag.</span></div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;<span class="comment"> * The constants for default lengths follow this encoding.</span></div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;<span class="preprocessor">#define PSA_ALG_AEAD_TAG_LENGTH_MASK            ((psa_algorithm_t)0x00003f00)</span></div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;<span class="preprocessor">#define PSA_AEAD_TAG_LENGTH_OFFSET 8</span></div><div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;</div><div class="line"><a name="l00929"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaa63c520b62ab001d54d28801742fc9db">  929</a></span>&#160;<span class="preprocessor">#define PSA_ALG_AEAD_WITH_TAG_LENGTH(alg, tag_length)                   \</span></div><div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_AEAD_TAG_LENGTH_MASK) |                          \</span></div><div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;<span class="preprocessor">     ((tag_length) &lt;&lt; PSA_AEAD_TAG_LENGTH_OFFSET &amp;                      \</span></div><div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;<span class="preprocessor">      PSA_ALG_AEAD_TAG_LENGTH_MASK))</span></div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;</div><div class="line"><a name="l00942"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaddea507e062250cda8a29407a9480d2b">  942</a></span>&#160;<span class="preprocessor">#define PSA_ALG_AEAD_WITH_DEFAULT_TAG_LENGTH(alg)                       \</span></div><div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;<span class="preprocessor">    (                                                                   \</span></div><div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;<span class="preprocessor">        PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE(alg, PSA_ALG_CCM)   \</span></div><div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;<span class="preprocessor">        PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE(alg, PSA_ALG_GCM)   \</span></div><div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;<span class="preprocessor">        0)</span></div><div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;<span class="preprocessor">#define PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE(alg, ref) \</span></div><div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;<span class="preprocessor">    PSA_ALG_AEAD_WITH_TAG_LENGTH(alg, 0) == \</span></div><div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;<span class="preprocessor">    PSA_ALG_AEAD_WITH_TAG_LENGTH(ref, 0) ?  \</span></div><div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;<span class="preprocessor">    ref :</span></div><div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;</div><div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;<span class="preprocessor">#define PSA_ALG_RSA_PKCS1V15_SIGN_BASE          ((psa_algorithm_t)0x10020000)</span></div><div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;</div><div class="line"><a name="l00968"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga702ff75385a6ae7d4247033f479439af">  968</a></span>&#160;<span class="preprocessor">#define PSA_ALG_RSA_PKCS1V15_SIGN(hash_alg)                             \</span></div><div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;<span class="preprocessor">    (PSA_ALG_RSA_PKCS1V15_SIGN_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;</div><div class="line"><a name="l00976"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga4215e2a78dcf834e9a625927faa2a817">  976</a></span>&#160;<span class="preprocessor">#define PSA_ALG_RSA_PKCS1V15_SIGN_RAW PSA_ALG_RSA_PKCS1V15_SIGN_BASE</span></div><div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_RSA_PKCS1V15_SIGN(alg)                               \</span></div><div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PKCS1V15_SIGN_BASE)</span></div><div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;</div><div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;<span class="preprocessor">#define PSA_ALG_RSA_PSS_BASE               ((psa_algorithm_t)0x10030000)</span></div><div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;</div><div class="line"><a name="l00999"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga62152bf4cb4bf6aace5e1be8f143564d">  999</a></span>&#160;<span class="preprocessor">#define PSA_ALG_RSA_PSS(hash_alg)                               \</span></div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;<span class="preprocessor">    (PSA_ALG_RSA_PSS_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_RSA_PSS(alg)                                 \</span></div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PSS_BASE)</span></div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;<span class="preprocessor">#define PSA_ALG_DSA_BASE                        ((psa_algorithm_t)0x10040000)</span></div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;</div><div class="line"><a name="l01019"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga9a68efdddff5ae95f104a1416b12742e"> 1019</a></span>&#160;<span class="preprocessor">#define PSA_ALG_DSA(hash_alg)                             \</span></div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;<span class="preprocessor">    (PSA_ALG_DSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;<span class="preprocessor">#define PSA_ALG_DETERMINISTIC_DSA_BASE          ((psa_algorithm_t)0x10050000)</span></div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;<span class="preprocessor">#define PSA_ALG_DSA_DETERMINISTIC_FLAG          ((psa_algorithm_t)0x00010000)</span></div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;<span class="preprocessor">#define PSA_ALG_DETERMINISTIC_DSA(hash_alg)                             \</span></div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;<span class="preprocessor">    (PSA_ALG_DETERMINISTIC_DSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_DSA(alg)                                             \</span></div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_HASH_MASK &amp; ~PSA_ALG_DSA_DETERMINISTIC_FLAG) ==  \</span></div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;<span class="preprocessor">     PSA_ALG_DSA_BASE)</span></div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;<span class="preprocessor">#define PSA_ALG_DSA_IS_DETERMINISTIC(alg)               \</span></div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_DSA_DETERMINISTIC_FLAG) != 0)</span></div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_DETERMINISTIC_DSA(alg)                       \</span></div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;<span class="preprocessor">    (PSA_ALG_IS_DSA(alg) &amp;&amp; PSA_ALG_DSA_IS_DETERMINISTIC(alg))</span></div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_RANDOMIZED_DSA(alg)                          \</span></div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;<span class="preprocessor">    (PSA_ALG_IS_DSA(alg) &amp;&amp; !PSA_ALG_DSA_IS_DETERMINISTIC(alg))</span></div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;<span class="preprocessor">#define PSA_ALG_ECDSA_BASE                      ((psa_algorithm_t)0x10060000)</span></div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;</div><div class="line"><a name="l01056"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga7e3ce9f514a227d5ba5d8318870452e3"> 1056</a></span>&#160;<span class="preprocessor">#define PSA_ALG_ECDSA(hash_alg)                                 \</span></div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;<span class="preprocessor">    (PSA_ALG_ECDSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;</div><div class="line"><a name="l01067"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga51d6b6044a62e33cae0cf64bfc3b22a4"> 1067</a></span>&#160;<span class="preprocessor">#define PSA_ALG_ECDSA_ANY PSA_ALG_ECDSA_BASE</span></div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;<span class="preprocessor">#define PSA_ALG_DETERMINISTIC_ECDSA_BASE        ((psa_algorithm_t)0x10070000)</span></div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;</div><div class="line"><a name="l01091"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga11da566bcd341661c8de921e2ca5ed03"> 1091</a></span>&#160;<span class="preprocessor">#define PSA_ALG_DETERMINISTIC_ECDSA(hash_alg)                           \</span></div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;<span class="preprocessor">    (PSA_ALG_DETERMINISTIC_ECDSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_ECDSA(alg)                                           \</span></div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_HASH_MASK &amp; ~PSA_ALG_DSA_DETERMINISTIC_FLAG) ==  \</span></div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;<span class="preprocessor">     PSA_ALG_ECDSA_BASE)</span></div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;<span class="preprocessor">#define PSA_ALG_ECDSA_IS_DETERMINISTIC(alg)             \</span></div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_DSA_DETERMINISTIC_FLAG) != 0)</span></div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_DETERMINISTIC_ECDSA(alg)                             \</span></div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;<span class="preprocessor">    (PSA_ALG_IS_ECDSA(alg) &amp;&amp; PSA_ALG_ECDSA_IS_DETERMINISTIC(alg))</span></div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_RANDOMIZED_ECDSA(alg)                                \</span></div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;<span class="preprocessor">    (PSA_ALG_IS_ECDSA(alg) &amp;&amp; !PSA_ALG_ECDSA_IS_DETERMINISTIC(alg))</span></div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;</div><div class="line"><a name="l01116"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gad8a8ea0536975363b66410cdeafe38b6"> 1116</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_HASH_AND_SIGN(alg)                                   \</span></div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;<span class="preprocessor">    (PSA_ALG_IS_RSA_PSS(alg) || PSA_ALG_IS_RSA_PKCS1V15_SIGN(alg) ||    \</span></div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;<span class="preprocessor">     PSA_ALG_IS_DSA(alg) || PSA_ALG_IS_ECDSA(alg))</span></div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;</div><div class="line"><a name="l01138"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga24cf6d7bcd2b9aeeeff86f07b6c674e3"> 1138</a></span>&#160;<span class="preprocessor">#define PSA_ALG_SIGN_GET_HASH(alg)                                     \</span></div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;<span class="preprocessor">    (PSA_ALG_IS_HASH_AND_SIGN(alg) ?                                   \</span></div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;<span class="preprocessor">     ((alg) &amp; PSA_ALG_HASH_MASK) == 0 ? </span><span class="comment">/*&quot;raw&quot; algorithm*/</span><span class="preprocessor"> 0 :        \</span></div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;<span class="preprocessor">     ((alg) &amp; PSA_ALG_HASH_MASK) | PSA_ALG_CATEGORY_HASH :             \</span></div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;<span class="preprocessor">     0)</span></div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;</div><div class="line"><a name="l01146"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga4c540d3abe43fb9abcb94f2bc51acef9"> 1146</a></span>&#160;<span class="preprocessor">#define PSA_ALG_RSA_PKCS1V15_CRYPT              ((psa_algorithm_t)0x12020000)</span></div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;<span class="preprocessor">#define PSA_ALG_RSA_OAEP_BASE                   ((psa_algorithm_t)0x12030000)</span></div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;</div><div class="line"><a name="l01163"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaa1235dc3fdd9839c6c1b1a9857344c76"> 1163</a></span>&#160;<span class="preprocessor">#define PSA_ALG_RSA_OAEP(hash_alg)                              \</span></div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;<span class="preprocessor">    (PSA_ALG_RSA_OAEP_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_RSA_OAEP(alg)                                \</span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_OAEP_BASE)</span></div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;<span class="preprocessor">#define PSA_ALG_RSA_OAEP_GET_HASH(alg)                          \</span></div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;<span class="preprocessor">    (PSA_ALG_IS_RSA_OAEP(alg) ?                                 \</span></div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;<span class="preprocessor">     ((alg) &amp; PSA_ALG_HASH_MASK) | PSA_ALG_CATEGORY_HASH :      \</span></div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;<span class="preprocessor">     0)</span></div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;<span class="preprocessor">#define PSA_ALG_HKDF_BASE                       ((psa_algorithm_t)0x20000100)</span></div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;</div><div class="line"><a name="l01193"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga32a888fb360e6e25cab8a343772c4a82"> 1193</a></span>&#160;<span class="preprocessor">#define PSA_ALG_HKDF(hash_alg)                                  \</span></div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;<span class="preprocessor">    (PSA_ALG_HKDF_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;</div><div class="line"><a name="l01206"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga1979d0a76fcee6164cf2e65960f38db2"> 1206</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_HKDF(alg)                            \</span></div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_HKDF_BASE)</span></div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;<span class="preprocessor">#define PSA_ALG_HKDF_GET_HASH(hkdf_alg)                         \</span></div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;<span class="preprocessor">    (PSA_ALG_CATEGORY_HASH | ((hkdf_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;<span class="preprocessor">#define PSA_ALG_TLS12_PRF_BASE                  ((psa_algorithm_t)0x20000200)</span></div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;</div><div class="line"><a name="l01234"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga6d5623c2ccda1d4a84e34351af8382d5"> 1234</a></span>&#160;<span class="preprocessor">#define PSA_ALG_TLS12_PRF(hash_alg)                                  \</span></div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;<span class="preprocessor">    (PSA_ALG_TLS12_PRF_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;</div><div class="line"><a name="l01245"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaa3c18890c50222e5219f40ade8927e66"> 1245</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_TLS12_PRF(alg)                                    \</span></div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_TLS12_PRF_BASE)</span></div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;<span class="preprocessor">#define PSA_ALG_TLS12_PRF_GET_HASH(hkdf_alg)                         \</span></div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;<span class="preprocessor">    (PSA_ALG_CATEGORY_HASH | ((hkdf_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;<span class="preprocessor">#define PSA_ALG_TLS12_PSK_TO_MS_BASE            ((psa_algorithm_t)0x20000300)</span></div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;</div><div class="line"><a name="l01274"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga039ec797f15d1635d9b2e09a611f8a68"> 1274</a></span>&#160;<span class="preprocessor">#define PSA_ALG_TLS12_PSK_TO_MS(hash_alg)                                  \</span></div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;<span class="preprocessor">    (PSA_ALG_TLS12_PSK_TO_MS_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;</div><div class="line"><a name="l01285"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gab25ecc074a93fd11069bedfbba5a287b"> 1285</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_TLS12_PSK_TO_MS(alg)                                    \</span></div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;<span class="preprocessor">    (((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_TLS12_PSK_TO_MS_BASE)</span></div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;<span class="preprocessor">#define PSA_ALG_TLS12_PSK_TO_MS_GET_HASH(hkdf_alg)                         \</span></div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;<span class="preprocessor">    (PSA_ALG_CATEGORY_HASH | ((hkdf_alg) &amp; PSA_ALG_HASH_MASK))</span></div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;<span class="preprocessor">#define PSA_ALG_KEY_DERIVATION_MASK             ((psa_algorithm_t)0x080fffff)</span></div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;<span class="preprocessor">#define PSA_ALG_KEY_AGREEMENT_MASK              ((psa_algorithm_t)0x10f00000)</span></div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;</div><div class="line"><a name="l01307"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga78bb81cffb87a635c247725eeb2a2682"> 1307</a></span>&#160;<span class="preprocessor">#define PSA_ALG_KEY_AGREEMENT(ka_alg, kdf_alg)  \</span></div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;<span class="preprocessor">    ((ka_alg) | (kdf_alg))</span></div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;<span class="preprocessor">#define PSA_ALG_KEY_AGREEMENT_GET_KDF(alg)                              \</span></div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_KEY_DERIVATION_MASK) | PSA_ALG_CATEGORY_KEY_DERIVATION)</span></div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;<span class="preprocessor">#define PSA_ALG_KEY_AGREEMENT_GET_BASE(alg)                             \</span></div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;<span class="preprocessor">    (((alg) &amp; PSA_ALG_KEY_AGREEMENT_MASK) | PSA_ALG_CATEGORY_KEY_AGREEMENT)</span></div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_RAW_KEY_AGREEMENT(alg)                               \</span></div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;<span class="preprocessor">    (PSA_ALG_KEY_AGREEMENT_GET_KDF(alg) == PSA_ALG_CATEGORY_KEY_DERIVATION)</span></div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_KEY_DERIVATION_OR_AGREEMENT(alg)     \</span></div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;<span class="preprocessor">    ((PSA_ALG_IS_KEY_DERIVATION(alg) || PSA_ALG_IS_KEY_AGREEMENT(alg)))</span></div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;</div><div class="line"><a name="l01330"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga0ebbb6f93a05b6511e6f108ffd2d1eb4"> 1330</a></span>&#160;<span class="preprocessor">#define PSA_ALG_FFDH                            ((psa_algorithm_t)0x30100000)</span></div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;</div><div class="line"><a name="l01343"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gaa3cf76164cd9375af4fb8a291078a19e"> 1343</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_FFDH(alg) \</span></div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;<span class="preprocessor">    (PSA_ALG_KEY_AGREEMENT_GET_BASE(alg) == PSA_ALG_FFDH)</span></div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;</div><div class="line"><a name="l01371"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gab2dbcf71b63785e7dd7b54a100edee43"> 1371</a></span>&#160;<span class="preprocessor">#define PSA_ALG_ECDH                            ((psa_algorithm_t)0x30200000)</span></div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;</div><div class="line"><a name="l01386"></a><span class="lineno"><a class="line" href="group__crypto__types.html#ga9d9b6533d2a6bea7bac7ae01facb820d"> 1386</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_ECDH(alg) \</span></div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;<span class="preprocessor">    (PSA_ALG_KEY_AGREEMENT_GET_BASE(alg) == PSA_ALG_ECDH)</span></div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;<span class="preprocessor">#define PSA_ALG_IS_WILDCARD(alg)                        \</span></div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;<span class="preprocessor">    (PSA_ALG_IS_HASH_AND_SIGN(alg) ?                    \</span></div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;<span class="preprocessor">     PSA_ALG_SIGN_GET_HASH(alg) == PSA_ALG_ANY_HASH :   \</span></div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;<span class="preprocessor">     (alg) == PSA_ALG_ANY_HASH)</span></div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;</div><div class="line"><a name="l01420"></a><span class="lineno"><a class="line" href="group__crypto__types.html#gacf83d7430e82b97cecb8b26ca6fa1426"> 1420</a></span>&#160;<span class="preprocessor">#define PSA_ALG_IS_WILDCARD(alg)                        \</span></div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;<span class="preprocessor">    (PSA_ALG_IS_HASH_AND_SIGN(alg) ?                    \</span></div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;<span class="preprocessor">     PSA_ALG_SIGN_GET_HASH(alg) == PSA_ALG_ANY_HASH :   \</span></div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;<span class="preprocessor">     (alg) == PSA_ALG_ANY_HASH)</span></div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;</div><div class="line"><a name="l01434"></a><span class="lineno"><a class="line" href="group__key__lifetimes.html#ga8b438870ba69489b685730d346455108"> 1434</a></span>&#160;<span class="preprocessor">#define PSA_KEY_LIFETIME_VOLATILE               ((psa_key_lifetime_t)0x00000000)</span></div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;</div><div class="line"><a name="l01448"></a><span class="lineno"><a class="line" href="group__key__lifetimes.html#ga3713a01c5fcd5f7eae46ff22ceaf6d02"> 1448</a></span>&#160;<span class="preprocessor">#define PSA_KEY_LIFETIME_PERSISTENT             ((psa_key_lifetime_t)0x00000001)</span></div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;</div><div class="line"><a name="l01467"></a><span class="lineno"><a class="line" href="group__policy.html#ga7dddccdd1303176e87a4d20c87b589ed"> 1467</a></span>&#160;<span class="preprocessor">#define PSA_KEY_USAGE_EXPORT                    ((psa_key_usage_t)0x00000001)</span></div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;</div><div class="line"><a name="l01478"></a><span class="lineno"><a class="line" href="group__policy.html#ga75153b296d045d529d97203a6a995dad"> 1478</a></span>&#160;<span class="preprocessor">#define PSA_KEY_USAGE_ENCRYPT                   ((psa_key_usage_t)0x00000100)</span></div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;</div><div class="line"><a name="l01489"></a><span class="lineno"><a class="line" href="group__policy.html#gac3f2d2e5983db1edde9f142ca9bf8e6a"> 1489</a></span>&#160;<span class="preprocessor">#define PSA_KEY_USAGE_DECRYPT                   ((psa_key_usage_t)0x00000200)</span></div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;</div><div class="line"><a name="l01499"></a><span class="lineno"><a class="line" href="group__policy.html#ga99b9f456cf59efc4b5579465407aef5a"> 1499</a></span>&#160;<span class="preprocessor">#define PSA_KEY_USAGE_SIGN                      ((psa_key_usage_t)0x00000400)</span></div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;</div><div class="line"><a name="l01509"></a><span class="lineno"><a class="line" href="group__policy.html#ga39b54ffd5958b69634607924fa53cea6"> 1509</a></span>&#160;<span class="preprocessor">#define PSA_KEY_USAGE_VERIFY                    ((psa_key_usage_t)0x00000800)</span></div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;</div><div class="line"><a name="l01513"></a><span class="lineno"><a class="line" href="group__policy.html#gaf19022acc5ef23cf12477f632b48a0b2"> 1513</a></span>&#160;<span class="preprocessor">#define PSA_KEY_USAGE_DERIVE                    ((psa_key_usage_t)0x00001000)</span></div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;</div><div class="line"><a name="l01525"></a><span class="lineno"><a class="line" href="group__derivation.html#ga90a1995a41e26ed5ca30d2d4641d1168"> 1525</a></span>&#160;<span class="preprocessor">#define PSA_KDF_STEP_SECRET              ((psa_key_derivation_step_t)0x0101)</span></div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;</div><div class="line"><a name="l01531"></a><span class="lineno"><a class="line" href="group__derivation.html#ga9f4da10191bcb690b88756ed8470b03c"> 1531</a></span>&#160;<span class="preprocessor">#define PSA_KDF_STEP_LABEL               ((psa_key_derivation_step_t)0x0201)</span></div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;</div><div class="line"><a name="l01537"></a><span class="lineno"><a class="line" href="group__derivation.html#ga384777dac55791d8f3a1af72c847b327"> 1537</a></span>&#160;<span class="preprocessor">#define PSA_KDF_STEP_SALT                ((psa_key_derivation_step_t)0x0202)</span></div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;</div><div class="line"><a name="l01543"></a><span class="lineno"><a class="line" href="group__derivation.html#ga836afe760bbda3dafc6c29631560b1a0"> 1543</a></span>&#160;<span class="preprocessor">#define PSA_KDF_STEP_INFO                ((psa_key_derivation_step_t)0x0203)</span></div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160;</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* PSA_CRYPTO_VALUES_H */</span><span class="preprocessor"></span></div></div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/dir_7dae9cfde651cd3cb034485ce5e391b9.html b/docs/html/dir_7dae9cfde651cd3cb034485ce5e391b9.html
new file mode 100644
index 0000000..35adc5e
--- /dev/null
+++ b/docs/html/dir_7dae9cfde651cd3cb034485ce5e391b9.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: psa Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_7dae9cfde651cd3cb034485ce5e391b9.html">psa</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">psa Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:crypto_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto_8h.html">crypto.h</a> <a href="crypto_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:crypto_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Platform Security Architecture cryptography module. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:crypto__sizes_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__sizes_8h.html">crypto_sizes.h</a> <a href="crypto__sizes_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:crypto__sizes_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">PSA cryptography module: Mbed TLS buffer size macros. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:crypto__types_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__types_8h.html">crypto_types.h</a> <a href="crypto__types_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:crypto__types_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">PSA cryptography module: type aliases. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:crypto__values_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="crypto__values_8h.html">crypto_values.h</a> <a href="crypto__values_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:crypto__values_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">PSA cryptography module: macros to build and analyze integer values. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/doc.png b/docs/html/doc.png
new file mode 100644
index 0000000..17edabf
--- /dev/null
+++ b/docs/html/doc.png
Binary files differ
diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css
new file mode 100644
index 0000000..1425ec5
--- /dev/null
+++ b/docs/html/doxygen.css
@@ -0,0 +1,1475 @@
+/* The standard CSS for doxygen 1.8.11 */
+
+body, table, div, p, dl {
+	font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+	font-size: 150%;
+}
+
+.title {
+	font: 400 14px/28px Roboto,sans-serif;
+	font-size: 150%;
+	font-weight: bold;
+	margin: 10px 2px;
+}
+
+h2.groupheader {
+	border-bottom: 1px solid #879ECB;
+	color: #354C7B;
+	font-size: 150%;
+	font-weight: normal;
+	margin-top: 1.75em;
+	padding-top: 8px;
+	padding-bottom: 4px;
+	width: 100%;
+}
+
+h3.groupheader {
+	font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+	-webkit-transition: text-shadow 0.5s linear;
+	-moz-transition: text-shadow 0.5s linear;
+	-ms-transition: text-shadow 0.5s linear;
+	-o-transition: text-shadow 0.5s linear;
+	transition: text-shadow 0.5s linear;
+	margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+	text-shadow: 0 0 15px cyan;
+}
+
+dt {
+	font-weight: bold;
+}
+
+div.multicol {
+	-moz-column-gap: 1em;
+	-webkit-column-gap: 1em;
+	-moz-column-count: 3;
+	-webkit-column-count: 3;
+}
+
+p.startli, p.startdd {
+	margin-top: 2px;
+}
+
+p.starttd {
+	margin-top: 0px;
+}
+
+p.endli {
+	margin-bottom: 0px;
+}
+
+p.enddd {
+	margin-bottom: 4px;
+}
+
+p.endtd {
+	margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+	font-weight: bold;
+}
+
+span.legend {
+        font-size: 70%;
+        text-align: center;
+}
+
+h3.version {
+        font-size: 90%;
+        text-align: center;
+}
+
+div.qindex, div.navtab{
+	background-color: #EBEFF6;
+	border: 1px solid #A3B4D7;
+	text-align: center;
+}
+
+div.qindex, div.navpath {
+	width: 100%;
+	line-height: 140%;
+}
+
+div.navtab {
+	margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+	color: #3D578C;
+	font-weight: normal;
+	text-decoration: none;
+}
+
+.contents a:visited {
+	color: #4665A2;
+}
+
+a:hover {
+	text-decoration: underline;
+}
+
+a.qindex {
+	font-weight: bold;
+}
+
+a.qindexHL {
+	font-weight: bold;
+	background-color: #9CAFD4;
+	color: #ffffff;
+	border: 1px double #869DCA;
+}
+
+.contents a.qindexHL:visited {
+        color: #ffffff;
+}
+
+a.el {
+	font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+	color: #4665A2; 
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+	color: #4665A2; 
+}
+
+/* @end */
+
+dl.el {
+	margin-left: -1cm;
+}
+
+pre.fragment {
+        border: 1px solid #C4CFE5;
+        background-color: #FBFCFD;
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+        overflow: auto;
+        word-wrap: break-word;
+        font-size:  9pt;
+        line-height: 125%;
+        font-family: monospace, fixed;
+        font-size: 105%;
+}
+
+div.fragment {
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+	background-color: #FBFCFD;
+	border: 1px solid #C4CFE5;
+}
+
+div.line {
+	font-family: monospace, fixed;
+        font-size: 13px;
+	min-height: 13px;
+	line-height: 1.0;
+	text-wrap: unrestricted;
+	white-space: -moz-pre-wrap; /* Moz */
+	white-space: -pre-wrap;     /* Opera 4-6 */
+	white-space: -o-pre-wrap;   /* Opera 7 */
+	white-space: pre-wrap;      /* CSS3  */
+	word-wrap: break-word;      /* IE 5.5+ */
+	text-indent: -53px;
+	padding-left: 53px;
+	padding-bottom: 0px;
+	margin: 0px;
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+div.line:after {
+    content:"\000A";
+    white-space: pre;
+}
+
+div.line.glow {
+	background-color: cyan;
+	box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+	padding-right: 4px;
+	text-align: right;
+	border-right: 2px solid #0F0;
+	background-color: #E8E8E8;
+        white-space: pre;
+}
+span.lineno a {
+	background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+	background-color: #C8C8C8;
+}
+
+div.ah, span.ah {
+	background-color: black;
+	font-weight: bold;
+	color: #ffffff;
+	margin-bottom: 3px;
+	margin-top: 3px;
+	padding: 0.2em;
+	border: solid thin #333;
+	border-radius: 0.5em;
+	-webkit-border-radius: .5em;
+	-moz-border-radius: .5em;
+	box-shadow: 2px 2px 3px #999;
+	-webkit-box-shadow: 2px 2px 3px #999;
+	-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+	background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+	background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
+}
+
+div.classindex ul {
+        list-style: none;
+        padding-left: 0;
+}
+
+div.classindex span.ai {
+        display: inline-block;
+}
+
+div.groupHeader {
+	margin-left: 16px;
+	margin-top: 12px;
+	font-weight: bold;
+}
+
+div.groupText {
+	margin-left: 16px;
+	font-style: italic;
+}
+
+body {
+	background-color: white;
+	color: black;
+        margin: 0;
+}
+
+div.contents {
+	margin-top: 10px;
+	margin-left: 12px;
+	margin-right: 8px;
+}
+
+td.indexkey {
+	background-color: #EBEFF6;
+	font-weight: bold;
+	border: 1px solid #C4CFE5;
+	margin: 2px 0px 2px 0;
+	padding: 2px 10px;
+        white-space: nowrap;
+        vertical-align: top;
+}
+
+td.indexvalue {
+	background-color: #EBEFF6;
+	border: 1px solid #C4CFE5;
+	padding: 2px 10px;
+	margin: 2px 0px;
+}
+
+tr.memlist {
+	background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+	text-align: center;
+}
+
+img.formulaDsp {
+	
+}
+
+img.formulaInl {
+	vertical-align: middle;
+}
+
+div.center {
+	text-align: center;
+        margin-top: 0px;
+        margin-bottom: 0px;
+        padding: 0px;
+}
+
+div.center img {
+	border: 0px;
+}
+
+address.footer {
+	text-align: right;
+	padding-right: 12px;
+}
+
+img.footer {
+	border: 0px;
+	vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+	color: #008000
+}
+
+span.keywordtype {
+	color: #604020
+}
+
+span.keywordflow {
+	color: #e08000
+}
+
+span.comment {
+	color: #800000
+}
+
+span.preprocessor {
+	color: #806020
+}
+
+span.stringliteral {
+	color: #002080
+}
+
+span.charliteral {
+	color: #008080
+}
+
+span.vhdldigit { 
+	color: #ff00ff 
+}
+
+span.vhdlchar { 
+	color: #000000 
+}
+
+span.vhdlkeyword { 
+	color: #700070 
+}
+
+span.vhdllogic { 
+	color: #ff0000 
+}
+
+blockquote {
+        background-color: #F7F8FB;
+        border-left: 2px solid #9CAFD4;
+        margin: 0 24px 0 4px;
+        padding: 0 12px 0 16px;
+}
+
+/* @end */
+
+/*
+.search {
+	color: #003399;
+	font-weight: bold;
+}
+
+form.search {
+	margin-bottom: 0px;
+	margin-top: 0px;
+}
+
+input.search {
+	font-size: 75%;
+	color: #000080;
+	font-weight: normal;
+	background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+	font-size: 75%;
+}
+
+.dirtab {
+	padding: 4px;
+	border-collapse: collapse;
+	border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+	background: #EBEFF6;
+	font-weight: bold;
+}
+
+hr {
+	height: 0px;
+	border: none;
+	border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+	height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+	border-spacing: 0px;
+	padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+	background-color: cyan;
+	box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+	background-color: #F9FAFC;
+	border: none;
+	margin: 4px;
+	padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+	padding: 0px 8px 4px 8px;
+	color: #555;
+}
+
+.memSeparator {
+        border-bottom: 1px solid #DEE4F0;
+        line-height: 1px;
+        margin: 0px;
+        padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+        white-space: nowrap;
+}
+
+.memItemRight {
+	width: 100%;
+}
+
+.memTemplParams {
+	color: #4665A2;
+        white-space: nowrap;
+	font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+	font-size: 80%;
+	color: #4665A2;
+	font-weight: normal;
+	margin-left: 9px;
+}
+
+.memnav {
+	background-color: #EBEFF6;
+	border: 1px solid #A3B4D7;
+	text-align: center;
+	margin: 2px;
+	margin-right: 15px;
+	padding: 2px;
+}
+
+.mempage {
+	width: 100%;
+}
+
+.memitem {
+	padding: 0;
+	margin-bottom: 10px;
+	margin-right: 5px;
+        -webkit-transition: box-shadow 0.5s linear;
+        -moz-transition: box-shadow 0.5s linear;
+        -ms-transition: box-shadow 0.5s linear;
+        -o-transition: box-shadow 0.5s linear;
+        transition: box-shadow 0.5s linear;
+        display: table !important;
+        width: 100%;
+}
+
+.memitem.glow {
+         box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+        font-weight: bold;
+        margin-left: 6px;
+}
+
+.memname td {
+	vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+        border-top: 1px solid #A8B8D9;
+        border-left: 1px solid #A8B8D9;
+        border-right: 1px solid #A8B8D9;
+        padding: 6px 0px 6px 0px;
+        color: #253555;
+        font-weight: bold;
+        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E2E8F2;
+        /* opera specific markup */
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        /* firefox specific markup */
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        -moz-border-radius-topright: 4px;
+        -moz-border-radius-topleft: 4px;
+        /* webkit specific markup */
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        -webkit-border-top-right-radius: 4px;
+        -webkit-border-top-left-radius: 4px;
+
+}
+
+.memdoc, dl.reflist dd {
+        border-bottom: 1px solid #A8B8D9;      
+        border-left: 1px solid #A8B8D9;      
+        border-right: 1px solid #A8B8D9; 
+        padding: 6px 10px 2px 10px;
+        background-color: #FBFCFD;
+        border-top-width: 0;
+        background-image:url('nav_g.png');
+        background-repeat:repeat-x;
+        background-color: #FFFFFF;
+        /* opera specific markup */
+        border-bottom-left-radius: 4px;
+        border-bottom-right-radius: 4px;
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        /* firefox specific markup */
+        -moz-border-radius-bottomleft: 4px;
+        -moz-border-radius-bottomright: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        /* webkit specific markup */
+        -webkit-border-bottom-left-radius: 4px;
+        -webkit-border-bottom-right-radius: 4px;
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+        padding: 5px;
+}
+
+dl.reflist dd {
+        margin: 0px 0px 10px 0px;
+        padding: 5px;
+}
+
+.paramkey {
+	text-align: right;
+}
+
+.paramtype {
+	white-space: nowrap;
+}
+
+.paramname {
+	color: #602020;
+	white-space: nowrap;
+}
+.paramname em {
+	font-style: normal;
+}
+.paramname code {
+        line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+        margin-left: 0px;
+        padding-left: 0px;
+}       
+
+.params .paramname, .retval .paramname {
+        font-weight: bold;
+        vertical-align: top;
+}
+        
+.params .paramtype {
+        font-style: italic;
+        vertical-align: top;
+}       
+        
+.params .paramdir {
+        font-family: "courier new",courier,monospace;
+        vertical-align: top;
+}
+
+table.mlabels {
+	border-spacing: 0px;
+}
+
+td.mlabels-left {
+	width: 100%;
+	padding: 0px;
+}
+
+td.mlabels-right {
+	vertical-align: bottom;
+	padding: 0px;
+	white-space: nowrap;
+}
+
+span.mlabels {
+        margin-left: 8px;
+}
+
+span.mlabel {
+        background-color: #728DC1;
+        border-top:1px solid #5373B4;
+        border-left:1px solid #5373B4;
+        border-right:1px solid #C4CFE5;
+        border-bottom:1px solid #C4CFE5;
+	text-shadow: none;
+	color: white;
+	margin-right: 4px;
+	padding: 2px 3px;
+	border-radius: 3px;
+	font-size: 7pt;
+	white-space: nowrap;
+	vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view inside a (index) page */
+
+div.directory {
+        margin: 10px 0px;
+        border-top: 1px solid #9CAFD4;
+        border-bottom: 1px solid #9CAFD4;
+        width: 100%;
+}
+
+.directory table {
+        border-collapse:collapse;
+}
+
+.directory td {
+        margin: 0px;
+        padding: 0px;
+	vertical-align: top;
+}
+
+.directory td.entry {
+        white-space: nowrap;
+        padding-right: 6px;
+	padding-top: 3px;
+}
+
+.directory td.entry a {
+        outline:none;
+}
+
+.directory td.entry a img {
+        border: none;
+}
+
+.directory td.desc {
+        width: 100%;
+        padding-left: 6px;
+	padding-right: 6px;
+	padding-top: 3px;
+	border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+	padding-left: 6px;
+	background-color: #F7F8FB;
+}
+
+.directory img {
+	vertical-align: -30%;
+}
+
+.directory .levels {
+        white-space: nowrap;
+        width: 100%;
+        text-align: right;
+        font-size: 9pt;
+}
+
+.directory .levels span {
+        cursor: pointer;
+        padding-left: 2px;
+        padding-right: 2px;
+	color: #3D578C;
+}
+
+.arrow {
+    color: #9CAFD4;
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    cursor: pointer;
+    font-size: 80%;
+    display: inline-block;
+    width: 16px;
+    height: 22px;
+}
+
+.icon {
+    font-family: Arial, Helvetica;
+    font-weight: bold;
+    font-size: 12px;
+    height: 14px;
+    width: 16px;
+    display: inline-block;
+    background-color: #728DC1;
+    color: white;
+    text-align: center;
+    border-radius: 4px;
+    margin-left: 2px;
+    margin-right: 2px;
+}
+
+.icona {
+    width: 24px;
+    height: 22px;
+    display: inline-block;
+}
+
+.iconfopen {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('folderopen.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+.iconfclosed {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('folderclosed.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+.icondoc {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('doc.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+table.directory {
+    font: 400 14px Roboto,sans-serif;
+}
+
+/* @end */
+
+div.dynheader {
+        margin-top: 8px;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+address {
+	font-style: normal;
+	color: #2A3D61;
+}
+
+table.doxtable caption {
+	caption-side: top;
+}
+
+table.doxtable {
+	border-collapse:collapse;
+        margin-top: 4px;
+        margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+	border: 1px solid #2D4068;
+	padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+	background-color: #374F7F;
+	color: #FFFFFF;
+	font-size: 110%;
+	padding-bottom: 4px;
+	padding-top: 5px;
+}
+
+table.fieldtable {
+        /*width: 100%;*/
+        margin-bottom: 10px;
+        border: 1px solid #A8B8D9;
+        border-spacing: 0px;
+        -moz-border-radius: 4px;
+        -webkit-border-radius: 4px;
+        border-radius: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+        padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+        white-space: nowrap;
+        border-right: 1px solid #A8B8D9;
+        border-bottom: 1px solid #A8B8D9;
+        vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+        padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+        border-bottom: 1px solid #A8B8D9;
+        /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+        margin-top: 0px;
+}       
+        
+.fieldtable td.fielddoc p:last-child {
+        margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+        border-bottom: none;
+}
+
+.fieldtable th {
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E2E8F2;
+        font-size: 90%;
+        color: #253555;
+        padding-bottom: 4px;
+        padding-top: 5px;
+        text-align:left;
+        -moz-border-radius-topleft: 4px;
+        -moz-border-radius-topright: 4px;
+        -webkit-border-top-left-radius: 4px;
+        -webkit-border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        border-top-right-radius: 4px;
+        border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+	top: 0px;
+	left: 10px;
+	height: 36px;
+	background-image: url('tab_b.png');
+	z-index: 101;
+	overflow: hidden;
+	font-size: 13px;
+}
+
+.navpath ul
+{
+	font-size: 11px;
+	background-image:url('tab_b.png');
+	background-repeat:repeat-x;
+	background-position: 0 -5px;
+	height:30px;
+	line-height:30px;
+	color:#8AA0CC;
+	border:solid 1px #C2CDE4;
+	overflow:hidden;
+	margin:0px;
+	padding:0px;
+}
+
+.navpath li
+{
+	list-style-type:none;
+	float:left;
+	padding-left:10px;
+	padding-right:15px;
+	background-image:url('bc_s.png');
+	background-repeat:no-repeat;
+	background-position:right;
+	color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+	height:32px;
+	display:block;
+	text-decoration: none;
+	outline: none;
+	color: #283A5D;
+	font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+	text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+	text-decoration: none;        
+}
+
+.navpath li.navelem a:hover
+{
+	color:#6884BD;
+}
+
+.navpath li.footer
+{
+        list-style-type:none;
+        float:right;
+        padding-left:10px;
+        padding-right:15px;
+        background-image:none;
+        background-repeat:no-repeat;
+        background-position:right;
+        color:#364D7C;
+        font-size: 8pt;
+}
+
+
+div.summary
+{
+	float: right;
+	font-size: 8pt;
+	padding-right: 5px;
+	width: 50%;
+	text-align: right;
+}       
+
+div.summary a
+{
+	white-space: nowrap;
+}
+
+table.classindex
+{
+        margin: 10px;
+        white-space: nowrap;
+        margin-left: 3%;
+        margin-right: 3%;
+        width: 94%;
+        border: 0;
+        border-spacing: 0; 
+        padding: 0;
+}
+
+div.ingroups
+{
+	font-size: 8pt;
+	width: 50%;
+	text-align: left;
+}
+
+div.ingroups a
+{
+	white-space: nowrap;
+}
+
+div.header
+{
+        background-image:url('nav_h.png');
+        background-repeat:repeat-x;
+	background-color: #F9FAFC;
+	margin:  0px;
+	border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+	padding: 5px 5px 5px 10px;
+}
+
+dl
+{
+        padding: 0 0 0 10px;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
+dl.section
+{
+	margin-left: 0px;
+	padding-left: 0px;
+}
+
+dl.note
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #D0C000;
+}
+
+dl.warning, dl.attention
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #00D000;
+}
+
+dl.deprecated
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #505050;
+}
+
+dl.todo
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #00C0E0;
+}
+
+dl.test
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #3030E0;
+}
+
+dl.bug
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #C08050;
+}
+
+dl.section dd {
+	margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+	text-align: center;
+	vertical-align: bottom;
+	border-collapse: separate;
+}
+ 
+#projectlogo img
+{ 
+	border: 0px none;
+}
+ 
+#projectalign
+{
+        vertical-align: middle;
+}
+
+#projectname
+{
+	font: 300% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 2px 0px;
+}
+    
+#projectbrief
+{
+	font: 120% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
+}
+
+#projectnumber
+{
+	font: 50% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
+}
+
+#titlearea
+{
+	padding: 0px;
+	margin: 0px;
+	width: 100%;
+	border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+        text-align: center;
+}
+
+.dotgraph
+{
+        text-align: center;
+}
+
+.mscgraph
+{
+        text-align: center;
+}
+
+.diagraph
+{
+        text-align: center;
+}
+
+.caption
+{
+	font-weight: bold;
+}
+
+div.zoom
+{
+	border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+        margin-bottom:50px;
+}
+
+dl.citelist dt {
+        color:#334975;
+        float:left;
+        font-weight:bold;
+        margin-right:10px;
+        padding:5px;
+}
+
+dl.citelist dd {
+        margin:2px 0;
+        padding:5px 0;
+}
+
+div.toc {
+        padding: 14px 25px;
+        background-color: #F4F6FA;
+        border: 1px solid #D8DFEE;
+        border-radius: 7px 7px 7px 7px;
+        float: right;
+        height: auto;
+        margin: 0 8px 10px 10px;
+        width: 200px;
+}
+
+div.toc li {
+        background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+        margin-top: 5px;
+        padding-left: 10px;
+        padding-top: 2px;
+}
+
+div.toc h3 {
+        font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+	color: #4665A2;
+        border-bottom: 0 none;
+        margin: 0;
+}
+
+div.toc ul {
+        list-style: none outside none;
+        border: medium none;
+        padding: 0px;
+}       
+
+div.toc li.level1 {
+        margin-left: 0px;
+}
+
+div.toc li.level2 {
+        margin-left: 15px;
+}
+
+div.toc li.level3 {
+        margin-left: 30px;
+}
+
+div.toc li.level4 {
+        margin-left: 45px;
+}
+
+.inherit_header {
+        font-weight: bold;
+        color: gray;
+        cursor: pointer;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+.inherit_header td {
+        padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+        display: none;
+}
+
+tr.heading h2 {
+        margin-top: 12px;
+        margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+        position: absolute;
+        display: none;
+}
+
+#powerTip {
+	cursor: default;
+	white-space: nowrap;
+	background-color: white;
+	border: 1px solid gray;
+	border-radius: 4px 4px 4px 4px;
+	box-shadow: 1px 1px 7px gray;
+	display: none;
+	font-size: smaller;
+	max-width: 80%;
+	opacity: 0.9;
+	padding: 1ex 1em 1em;
+	position: absolute;
+	z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+        color: grey;
+	font-style: italic;
+}
+
+#powerTip div.ttname a {
+        font-weight: bold;
+}
+
+#powerTip div.ttname {
+        font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+        color: #006318;
+}
+
+#powerTip div {
+        margin: 0px;
+        padding: 0px;
+        font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+	content: "";
+	position: absolute;
+	margin: 0px;
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.w:after,  #powerTip.w:before,
+#powerTip.e:after,  #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+	border: solid transparent;
+	content: " ";
+	height: 0;
+	width: 0;
+	position: absolute;
+}
+
+#powerTip.n:after,  #powerTip.s:after,
+#powerTip.w:after,  #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+	border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before,  #powerTip.s:before,
+#powerTip.w:before,  #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+	border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+	top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+	border-top-color: #ffffff;
+	border-width: 10px;
+	margin: 0px -10px;
+}
+#powerTip.n:before {
+	border-top-color: #808080;
+	border-width: 11px;
+	margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+	left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+	right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+	left: 14px;
+}
+
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+	bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+	border-bottom-color: #ffffff;
+	border-width: 10px;
+	margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+	border-bottom-color: #808080;
+	border-width: 11px;
+	margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+	left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+	right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+	left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+	left: 100%;
+}
+#powerTip.e:after {
+	border-left-color: #ffffff;
+	border-width: 10px;
+	top: 50%;
+	margin-top: -10px;
+}
+#powerTip.e:before {
+	border-left-color: #808080;
+	border-width: 11px;
+	top: 50%;
+	margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+	right: 100%;
+}
+#powerTip.w:after {
+	border-right-color: #ffffff;
+	border-width: 10px;
+	top: 50%;
+	margin-top: -10px;
+}
+#powerTip.w:before {
+	border-right-color: #808080;
+	border-width: 11px;
+	top: 50%;
+	margin-top: -11px;
+}
+
+@media print
+{
+  #top { display: none; }
+  #side-nav { display: none; }
+  #nav-path { display: none; }
+  body { overflow:visible; }
+  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+  .summary { display: none; }
+  .memitem { page-break-inside: avoid; }
+  #doc-content
+  {
+    margin-left:0 !important;
+    height:auto !important;
+    width:auto !important;
+    overflow:inherit;
+    display:inline;
+  }
+}
+
diff --git a/docs/html/doxygen.png b/docs/html/doxygen.png
new file mode 100644
index 0000000..3ff17d8
--- /dev/null
+++ b/docs/html/doxygen.png
Binary files differ
diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js
new file mode 100644
index 0000000..85e1836
--- /dev/null
+++ b/docs/html/dynsections.js
@@ -0,0 +1,97 @@
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+   content.hide();
+   summary.show();
+   $(linkObj).addClass('closed').removeClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+   content.show();
+   summary.hide();
+   $(linkObj).removeClass('closed').addClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ } 
+ return false;
+}
+
+function updateStripes()
+{
+  $('table.directory tr').
+       removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+  $('table.directory tr').each(function() {
+    var l = this.id.split('_').length-1;
+    var i = $('#img'+this.id.substring(3));
+    var a = $('#arr'+this.id.substring(3));
+    if (l<level+1) {
+      i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
+      a.html('&#9660;');
+      $(this).show();
+    } else if (l==level+1) {
+      i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
+      a.html('&#9658;');
+      $(this).show();
+    } else {
+      $(this).hide();
+    }
+  });
+  updateStripes();
+}
+
+function toggleFolder(id)
+{
+  // the clicked row
+  var currentRow = $('#row_'+id);
+
+  // all rows after the clicked row
+  var rows = currentRow.nextAll("tr");
+
+  var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+
+  // only match elements AFTER this one (can't hide elements before)
+  var childRows = rows.filter(function() { return this.id.match(re); });
+
+  // first row is visible we are HIDING
+  if (childRows.filter(':first').is(':visible')===true) {
+    // replace down arrow by right arrow for current row
+    var currentRowSpans = currentRow.find("span");
+    currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+    currentRowSpans.filter(".arrow").html('&#9658;');
+    rows.filter("[id^=row_"+id+"]").hide(); // hide all children
+  } else { // we are SHOWING
+    // replace right arrow by down arrow for current row
+    var currentRowSpans = currentRow.find("span");
+    currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
+    currentRowSpans.filter(".arrow").html('&#9660;');
+    // replace down arrows by right arrows for child rows
+    var childRowsSpans = childRows.find("span");
+    childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+    childRowsSpans.filter(".arrow").html('&#9658;');
+    childRows.show(); //show all children
+  }
+  updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+  var rows = $('tr.inherit.'+id);
+  var img = $('tr.inherit_header.'+id+' img');
+  var src = $(img).attr('src');
+  if (rows.filter(':first').is(':visible')===true) {
+    rows.css('display','none');
+    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+  } else {
+    rows.css('display','table-row'); // using show() causes jump in firefox
+    $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+  }
+}
+
diff --git a/docs/html/files.html b/docs/html/files.html
new file mode 100644
index 0000000..63d5a9c
--- /dev/null
+++ b/docs/html/files.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: File List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">File List</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')">&#160;</span><a class="el" href="dir_7dae9cfde651cd3cb034485ce5e391b9.html" target="_self">psa</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="crypto_8h_source.html"><span class="icondoc"></span></a><a class="el" href="crypto_8h.html" target="_self">crypto.h</a></td><td class="desc">Platform Security Architecture cryptography module </td></tr>
+<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="crypto__sizes_8h_source.html"><span class="icondoc"></span></a><a class="el" href="crypto__sizes_8h.html" target="_self">crypto_sizes.h</a></td><td class="desc">PSA cryptography module: Mbed TLS buffer size macros </td></tr>
+<tr id="row_0_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="crypto__types_8h_source.html"><span class="icondoc"></span></a><a class="el" href="crypto__types_8h.html" target="_self">crypto_types.h</a></td><td class="desc">PSA cryptography module: type aliases </td></tr>
+<tr id="row_0_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="crypto__values_8h_source.html"><span class="icondoc"></span></a><a class="el" href="crypto__values_8h.html" target="_self">crypto_values.h</a></td><td class="desc">PSA cryptography module: macros to build and analyze integer values </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/folderclosed.png b/docs/html/folderclosed.png
new file mode 100644
index 0000000..bb8ab35
--- /dev/null
+++ b/docs/html/folderclosed.png
Binary files differ
diff --git a/docs/html/folderopen.png b/docs/html/folderopen.png
new file mode 100644
index 0000000..d6c7f67
--- /dev/null
+++ b/docs/html/folderopen.png
Binary files differ
diff --git a/docs/html/functions.html b/docs/html/functions.html
new file mode 100644
index 0000000..527d5b8
--- /dev/null
+++ b/docs/html/functions.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class&#160;Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div><ul>
+<li>e
+: <a class="el" href="structpsa__generate__key__extra__rsa.html#a53ccb9e4375f3c9af6e3ecfe111ce11d">psa_generate_key_extra_rsa</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html
new file mode 100644
index 0000000..0a3d6cd
--- /dev/null
+++ b/docs/html/functions_vars.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Class Members - Variables</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Class&#160;Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>e
+: <a class="el" href="structpsa__generate__key__extra__rsa.html#a53ccb9e4375f3c9af6e3ecfe111ce11d">psa_generate_key_extra_rsa</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/globals.html b/docs/html/globals.html
new file mode 100644
index 0000000..df99e4a
--- /dev/null
+++ b/docs/html/globals.html
@@ -0,0 +1,803 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: File Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>File&#160;Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html#index_p"><span>p</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all documented file members with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>psa_aead_abort()
+: <a class="el" href="group__aead.html#gae8a5f93d92318c8f592ee9fbb9d36ba0">crypto.h</a>
+</li>
+<li>psa_aead_decrypt()
+: <a class="el" href="group__aead.html#gaa8ce6527f2e227f1071fadbf2099793b">crypto.h</a>
+</li>
+<li>PSA_AEAD_DECRYPT_OUTPUT_SIZE
+: <a class="el" href="crypto__sizes_8h.html#a1d057796166c16eb673ad1997e48a60b">crypto_sizes.h</a>
+</li>
+<li>psa_aead_decrypt_setup()
+: <a class="el" href="group__aead.html#ga439896519d4a367ec86b47f201884152">crypto.h</a>
+</li>
+<li>psa_aead_encrypt()
+: <a class="el" href="group__aead.html#ga44de092cf58bb6c820c5c80a6c51610d">crypto.h</a>
+</li>
+<li>PSA_AEAD_ENCRYPT_OUTPUT_SIZE
+: <a class="el" href="crypto__sizes_8h.html#a85667d47a7aa6c7b99a80e5273671266">crypto_sizes.h</a>
+</li>
+<li>psa_aead_encrypt_setup()
+: <a class="el" href="group__aead.html#ga47265dc4852f1476f852752218fd12b2">crypto.h</a>
+</li>
+<li>psa_aead_finish()
+: <a class="el" href="group__aead.html#ga759791bbe1763b377c3b5447641f1fc8">crypto.h</a>
+</li>
+<li>PSA_AEAD_FINISH_OUTPUT_SIZE
+: <a class="el" href="crypto__sizes_8h.html#af45d92c1d7ef43822b8df21ab1117d3f">crypto_sizes.h</a>
+</li>
+<li>psa_aead_generate_nonce()
+: <a class="el" href="group__aead.html#ga3eadcf2a29f662129ea4fb3454969ba2">crypto.h</a>
+</li>
+<li>PSA_AEAD_OPERATION_INIT
+: <a class="el" href="group__aead.html#gaf52e036794c0dc6fbadd93a2b990f366">crypto.h</a>
+</li>
+<li>psa_aead_operation_t
+: <a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">crypto.h</a>
+</li>
+<li>psa_aead_set_lengths()
+: <a class="el" href="group__aead.html#gad3431e28d05002c2a7b0760610176050">crypto.h</a>
+</li>
+<li>psa_aead_set_nonce()
+: <a class="el" href="group__aead.html#ga40641d0721ca7fe01bbcd9ef635fbc46">crypto.h</a>
+</li>
+<li>PSA_AEAD_TAG_LENGTH
+: <a class="el" href="crypto__sizes_8h.html#a8e3079b2e624cb8d32b94843cddada49">crypto_sizes.h</a>
+</li>
+<li>psa_aead_update()
+: <a class="el" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">crypto.h</a>
+</li>
+<li>psa_aead_update_ad()
+: <a class="el" href="group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569">crypto.h</a>
+</li>
+<li>psa_aead_verify()
+: <a class="el" href="group__aead.html#gaaed211fc61977c859d6ff07f39f59219">crypto.h</a>
+</li>
+<li>PSA_ALG_AEAD_WITH_DEFAULT_TAG_LENGTH
+: <a class="el" href="group__crypto__types.html#gaddea507e062250cda8a29407a9480d2b">crypto_values.h</a>
+</li>
+<li>PSA_ALG_AEAD_WITH_TAG_LENGTH
+: <a class="el" href="group__crypto__types.html#gaa63c520b62ab001d54d28801742fc9db">crypto_values.h</a>
+</li>
+<li>PSA_ALG_ANY_HASH
+: <a class="el" href="group__crypto__types.html#gaa1288ea8bd397a8a3f5e19e94110f2e4">crypto_values.h</a>
+</li>
+<li>PSA_ALG_ARC4
+: <a class="el" href="group__crypto__types.html#gab6a5284decb0e5e1b5b8740a41ef3c5e">crypto_values.h</a>
+</li>
+<li>PSA_ALG_CBC_NO_PADDING
+: <a class="el" href="group__crypto__types.html#gacb332d72716958880ee7f97d8365ae66">crypto_values.h</a>
+</li>
+<li>PSA_ALG_CBC_PKCS7
+: <a class="el" href="group__crypto__types.html#gaef50d2e9716eb6d476046608e4e0c78c">crypto_values.h</a>
+</li>
+<li>PSA_ALG_CTR
+: <a class="el" href="group__crypto__types.html#gad318309706a769cffdc64e4c7e06b2e9">crypto_values.h</a>
+</li>
+<li>PSA_ALG_DETERMINISTIC_ECDSA
+: <a class="el" href="group__crypto__types.html#ga11da566bcd341661c8de921e2ca5ed03">crypto_values.h</a>
+</li>
+<li>PSA_ALG_DSA
+: <a class="el" href="group__crypto__types.html#ga9a68efdddff5ae95f104a1416b12742e">crypto_values.h</a>
+</li>
+<li>PSA_ALG_ECDH
+: <a class="el" href="group__crypto__types.html#gab2dbcf71b63785e7dd7b54a100edee43">crypto_values.h</a>
+</li>
+<li>PSA_ALG_ECDSA
+: <a class="el" href="group__crypto__types.html#ga7e3ce9f514a227d5ba5d8318870452e3">crypto_values.h</a>
+</li>
+<li>PSA_ALG_ECDSA_ANY
+: <a class="el" href="group__crypto__types.html#ga51d6b6044a62e33cae0cf64bfc3b22a4">crypto_values.h</a>
+</li>
+<li>PSA_ALG_FFDH
+: <a class="el" href="group__crypto__types.html#ga0ebbb6f93a05b6511e6f108ffd2d1eb4">crypto_values.h</a>
+</li>
+<li>PSA_ALG_FULL_LENGTH_MAC
+: <a class="el" href="group__crypto__types.html#gaa05a8d99634f3350597ac9284fb70cb1">crypto_values.h</a>
+</li>
+<li>PSA_ALG_HKDF
+: <a class="el" href="group__crypto__types.html#ga32a888fb360e6e25cab8a343772c4a82">crypto_values.h</a>
+</li>
+<li>PSA_ALG_HMAC
+: <a class="el" href="group__crypto__types.html#ga70f397425684b3efcde1e0e34c28261f">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_AEAD
+: <a class="el" href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_ASYMMETRIC_ENCRYPTION
+: <a class="el" href="group__crypto__types.html#ga41d2ee937d54efd76bd54a97b2ebc08a">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_BLOCK_CIPHER_MAC
+: <a class="el" href="group__crypto__types.html#gae49d1eb601125d65a5c5b252aa45479e">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_CIPHER
+: <a class="el" href="group__crypto__types.html#ga1d1a5a402ad89a2e68f12bfb535490eb">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_ECDH
+: <a class="el" href="group__crypto__types.html#ga9d9b6533d2a6bea7bac7ae01facb820d">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_FFDH
+: <a class="el" href="group__crypto__types.html#gaa3cf76164cd9375af4fb8a291078a19e">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_HASH
+: <a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_HASH_AND_SIGN
+: <a class="el" href="group__crypto__types.html#gad8a8ea0536975363b66410cdeafe38b6">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_HKDF
+: <a class="el" href="group__crypto__types.html#ga1979d0a76fcee6164cf2e65960f38db2">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_HMAC
+: <a class="el" href="group__crypto__types.html#ga4a050c3c3cbc6eb96418f18847601c8a">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_KEY_AGREEMENT
+: <a class="el" href="group__crypto__types.html#ga59753742cb06553bd22751bbef472b6f">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_KEY_DERIVATION
+: <a class="el" href="group__crypto__types.html#gaf8b90c648aa53dbd06c236695e300cd0">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_KEY_SELECTION
+: <a class="el" href="group__crypto__types.html#ga51b1834ee5e98c6a83c2cfc7699f9077">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_MAC
+: <a class="el" href="group__crypto__types.html#gaca7aee4c9dde316b3b1a150a26eab776">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_SIGN
+: <a class="el" href="group__crypto__types.html#ga6d490d0904e0698f6c1268a89d72ff31">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_STREAM_CIPHER
+: <a class="el" href="group__crypto__types.html#gacfec68e0c6175e02e1b2ebc97df383c0">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_TLS12_PRF
+: <a class="el" href="group__crypto__types.html#gaa3c18890c50222e5219f40ade8927e66">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_TLS12_PSK_TO_MS
+: <a class="el" href="group__crypto__types.html#gab25ecc074a93fd11069bedfbba5a287b">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_WILDCARD
+: <a class="el" href="group__crypto__types.html#gacf83d7430e82b97cecb8b26ca6fa1426">crypto_values.h</a>
+</li>
+<li>PSA_ALG_KEY_AGREEMENT
+: <a class="el" href="group__crypto__types.html#ga78bb81cffb87a635c247725eeb2a2682">crypto_values.h</a>
+</li>
+<li>PSA_ALG_RSA_OAEP
+: <a class="el" href="group__crypto__types.html#gaa1235dc3fdd9839c6c1b1a9857344c76">crypto_values.h</a>
+</li>
+<li>PSA_ALG_RSA_PKCS1V15_CRYPT
+: <a class="el" href="group__crypto__types.html#ga4c540d3abe43fb9abcb94f2bc51acef9">crypto_values.h</a>
+</li>
+<li>PSA_ALG_RSA_PKCS1V15_SIGN
+: <a class="el" href="group__crypto__types.html#ga702ff75385a6ae7d4247033f479439af">crypto_values.h</a>
+</li>
+<li>PSA_ALG_RSA_PKCS1V15_SIGN_RAW
+: <a class="el" href="group__crypto__types.html#ga4215e2a78dcf834e9a625927faa2a817">crypto_values.h</a>
+</li>
+<li>PSA_ALG_RSA_PSS
+: <a class="el" href="group__crypto__types.html#ga62152bf4cb4bf6aace5e1be8f143564d">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA3_224
+: <a class="el" href="group__crypto__types.html#ga16f5fe34ccce68c2fada1224c054a999">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA3_256
+: <a class="el" href="group__crypto__types.html#gaace70d9515489bbe3c5e7ac1b7d9155b">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA3_384
+: <a class="el" href="group__crypto__types.html#gab0f079257ea75e2acfe2fc3b38c78cd8">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA3_512
+: <a class="el" href="group__crypto__types.html#ga37e5dbe936dddb155e76f2997de27188">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA_224
+: <a class="el" href="group__crypto__types.html#ga25d6a3244d10a7148fe6b026d1979f7b">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA_256
+: <a class="el" href="group__crypto__types.html#ga619471f978e13cdd0a1e37145e4bf341">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA_384
+: <a class="el" href="group__crypto__types.html#ga58af64dd9a86a287e8da9ed7739eead4">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA_512
+: <a class="el" href="group__crypto__types.html#gafba3ae409f46d3dd7f37a0910660c3e9">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA_512_224
+: <a class="el" href="group__crypto__types.html#ga3fe2d7c3c80e3186ca78d16a35d5d931">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA_512_256
+: <a class="el" href="group__crypto__types.html#ga5910b3964c14e9613e8643a45b09c2d4">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SIGN_GET_HASH
+: <a class="el" href="group__crypto__types.html#ga24cf6d7bcd2b9aeeeff86f07b6c674e3">crypto_values.h</a>
+</li>
+<li>PSA_ALG_TLS12_PRF
+: <a class="el" href="group__crypto__types.html#ga6d5623c2ccda1d4a84e34351af8382d5">crypto_values.h</a>
+</li>
+<li>PSA_ALG_TLS12_PSK_TO_MS
+: <a class="el" href="group__crypto__types.html#ga039ec797f15d1635d9b2e09a611f8a68">crypto_values.h</a>
+</li>
+<li>PSA_ALG_TLS12_PSK_TO_MS_MAX_PSK_LEN
+: <a class="el" href="crypto__sizes_8h.html#ab589ea3b86f2bfa18880459299c58f8a">crypto_sizes.h</a>
+</li>
+<li>PSA_ALG_TRUNCATED_MAC
+: <a class="el" href="group__crypto__types.html#gaf36137110baf7bb13c5028fd62c64276">crypto_values.h</a>
+</li>
+<li>PSA_ALG_XTS
+: <a class="el" href="group__crypto__types.html#gaa722c0e426a797fd6d99623f59748125">crypto_values.h</a>
+</li>
+<li>psa_algorithm_t
+: <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">crypto_types.h</a>
+</li>
+<li>psa_allocate_key()
+: <a class="el" href="group__key__management.html#ga40094b77b7a42b9c8e158395113f1a35">crypto.h</a>
+</li>
+<li>psa_asymmetric_decrypt()
+: <a class="el" href="group__asymmetric.html#ga34b55fbaee23dba1a677186fc66a556e">crypto.h</a>
+</li>
+<li>PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE
+: <a class="el" href="crypto__sizes_8h.html#a61a246f3eac41989821d982e56fea6c1">crypto_sizes.h</a>
+</li>
+<li>psa_asymmetric_encrypt()
+: <a class="el" href="group__asymmetric.html#gad429293b7b0bf2a830b9540a02552004">crypto.h</a>
+</li>
+<li>PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE
+: <a class="el" href="crypto__sizes_8h.html#a66ba3bd93e5ec52870ccc3848778bad8">crypto_sizes.h</a>
+</li>
+<li>psa_asymmetric_sign()
+: <a class="el" href="group__asymmetric.html#ga1b0db9d345b5048cdd39357ac2d56c07">crypto.h</a>
+</li>
+<li>PSA_ASYMMETRIC_SIGN_OUTPUT_SIZE
+: <a class="el" href="crypto__sizes_8h.html#a77565b9b4fe6d8730fd2120f4c8378ab">crypto_sizes.h</a>
+</li>
+<li>PSA_ASYMMETRIC_SIGNATURE_MAX_SIZE
+: <a class="el" href="crypto__sizes_8h.html#ad755101764dba14589e5919ee41be7ca">crypto_sizes.h</a>
+</li>
+<li>psa_asymmetric_verify()
+: <a class="el" href="group__asymmetric.html#ga1b8e964c8d927e3d632325d762959eb7">crypto.h</a>
+</li>
+<li>PSA_BLOCK_CIPHER_BLOCK_SIZE
+: <a class="el" href="group__crypto__types.html#gacaa366bdeb0413e63e87a667c5457b2e">crypto_values.h</a>
+</li>
+<li>psa_cipher_abort()
+: <a class="el" href="group__cipher.html#gaad482cdca2098bca0620596aaa02eaa4">crypto.h</a>
+</li>
+<li>psa_cipher_decrypt()
+: <a class="el" href="group__cipher.html#ga43d5991711ec45c98af0c1d99f6e0216">crypto.h</a>
+</li>
+<li>psa_cipher_decrypt_setup()
+: <a class="el" href="group__cipher.html#gaddf8504e5367cd0efb4415bdec004f44">crypto.h</a>
+</li>
+<li>psa_cipher_encrypt()
+: <a class="el" href="group__cipher.html#gac76dda492d9a1ba6b327bff610ec17b2">crypto.h</a>
+</li>
+<li>psa_cipher_encrypt_setup()
+: <a class="el" href="group__cipher.html#ga2a7fc79a9d150d42dba99f40ee3a185e">crypto.h</a>
+</li>
+<li>psa_cipher_finish()
+: <a class="el" href="group__cipher.html#ga1dcb58b8befe23f8a4d7a1d49c99249b">crypto.h</a>
+</li>
+<li>psa_cipher_generate_iv()
+: <a class="el" href="group__cipher.html#ga44857cf5e0c3d134a3c560f8ff5b50aa">crypto.h</a>
+</li>
+<li>PSA_CIPHER_OPERATION_INIT
+: <a class="el" href="group__cipher.html#ga2da0541aabf9a4995cf2004e36311919">crypto.h</a>
+</li>
+<li>psa_cipher_operation_t
+: <a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">crypto.h</a>
+</li>
+<li>psa_cipher_set_iv()
+: <a class="el" href="group__cipher.html#ga1359b2101f31637496ce7cc36c6e3d42">crypto.h</a>
+</li>
+<li>psa_cipher_update()
+: <a class="el" href="group__cipher.html#gafd0caea99cf1052527e4089d37f5ab91">crypto.h</a>
+</li>
+<li>psa_close_key()
+: <a class="el" href="group__key__management.html#gaa09b720d299dfe6b9f41c36e448078eb">crypto.h</a>
+</li>
+<li>psa_copy_key()
+: <a class="el" href="group__import__export.html#ga5c1c24176cfb1517a8806235b3162a9d">crypto.h</a>
+</li>
+<li>psa_create_key()
+: <a class="el" href="group__key__management.html#ga4108f255d3eaa6d23a7a14b684af8d7c">crypto.h</a>
+</li>
+<li>PSA_CRYPTO_GENERATOR_INIT
+: <a class="el" href="group__generators.html#ga4788b471385fc667876fbd8a0d3fe062">crypto.h</a>
+</li>
+<li>psa_crypto_generator_t
+: <a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">crypto.h</a>
+</li>
+<li>psa_crypto_init()
+: <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9">crypto.h</a>
+</li>
+<li>psa_destroy_key()
+: <a class="el" href="group__import__export.html#ga165085fc1bc7a78b91792fdd94ae102c">crypto.h</a>
+</li>
+<li>psa_ecc_curve_t
+: <a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">crypto_types.h</a>
+</li>
+<li>PSA_ECDSA_SIGNATURE_SIZE
+: <a class="el" href="crypto__sizes_8h.html#a10c472a35f04051add6b20cc228ffc11">crypto_sizes.h</a>
+</li>
+<li>PSA_ERROR_BAD_STATE
+: <a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_BUFFER_TOO_SMALL
+: <a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_COMMUNICATION_FAILURE
+: <a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_EMPTY_SLOT
+: <a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_HARDWARE_FAILURE
+: <a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_INSUFFICIENT_CAPACITY
+: <a class="el" href="group__error.html#gaf1fa61f72e9e5b4a848c991bea495767">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_INSUFFICIENT_ENTROPY
+: <a class="el" href="group__error.html#ga4deb59fec02297ec5d8b42178323f675">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_INSUFFICIENT_MEMORY
+: <a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_INSUFFICIENT_STORAGE
+: <a class="el" href="group__error.html#ga897a45eb206a6f6b7be7ffbe36f0d766">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_INVALID_ARGUMENT
+: <a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_INVALID_HANDLE
+: <a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_INVALID_PADDING
+: <a class="el" href="group__error.html#gabe29594edbfb152cf153975b0597ac48">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_INVALID_SIGNATURE
+: <a class="el" href="group__error.html#ga35927f755d232c4766de600f2c49e9f2">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_NOT_PERMITTED
+: <a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_NOT_SUPPORTED
+: <a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_OCCUPIED_SLOT
+: <a class="el" href="group__error.html#gac2fee3a51249fbea45360aaa911f3e58">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_STORAGE_FAILURE
+: <a class="el" href="group__error.html#gadd169a1af2707862b95fb9df91dfc37d">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_TAMPERING_DETECTED
+: <a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_UNKNOWN_ERROR
+: <a class="el" href="group__error.html#ga24d5fdcdd759f846f79d9e581c63a83f">crypto_values.h</a>
+</li>
+<li>psa_export_key()
+: <a class="el" href="group__import__export.html#ga902b9a7a6cf34d6111668be777b05eaf">crypto.h</a>
+</li>
+<li>psa_export_public_key()
+: <a class="el" href="group__import__export.html#gad760d1f0d4e60972c78cbb4c8a528256">crypto.h</a>
+</li>
+<li>psa_generate_key()
+: <a class="el" href="group__random.html#ga72921520494b4f007a3afb904cd9ecdd">crypto.h</a>
+</li>
+<li>psa_generate_random()
+: <a class="el" href="group__random.html#ga1985eae417dfbccedf50d5fff54ea8c5">crypto.h</a>
+</li>
+<li>psa_generator_abort()
+: <a class="el" href="group__generators.html#ga563ca64537d90368899286b36d8cf7f3">crypto.h</a>
+</li>
+<li>psa_generator_import_key()
+: <a class="el" href="group__generators.html#ga7fcdf07cd37279ca167db484053da894">crypto.h</a>
+</li>
+<li>psa_generator_read()
+: <a class="el" href="group__generators.html#gab5712ad29b78c2b170e64cc5bcfc1bce">crypto.h</a>
+</li>
+<li>PSA_GENERATOR_UNBRIDLED_CAPACITY
+: <a class="el" href="group__generators.html#gac3222df9b9ecca4d33ae56a7b8fbb1c9">crypto.h</a>
+</li>
+<li>psa_get_generator_capacity()
+: <a class="el" href="group__generators.html#ga7453491e3b440193be2c5dccc2040fd2">crypto.h</a>
+</li>
+<li>psa_get_key_domain_parameters()
+: <a class="el" href="group__import__export.html#gae260b92e32ac5d63f7dfc6ffdf6536f7">crypto.h</a>
+</li>
+<li>psa_get_key_information()
+: <a class="el" href="group__import__export.html#gae8939902d6977ea8ad13eb7b4db9a042">crypto.h</a>
+</li>
+<li>psa_get_key_lifetime()
+: <a class="el" href="group__key__management.html#ga1e4825ab59260aeb3bdbb3ff07210022">crypto.h</a>
+</li>
+<li>psa_get_key_policy()
+: <a class="el" href="group__policy.html#gaed087d1386b807edee66b2e445ba9111">crypto.h</a>
+</li>
+<li>psa_hash_abort()
+: <a class="el" href="group__hash.html#gab0b4d5f9912a615559497a467b532928">crypto.h</a>
+</li>
+<li>psa_hash_clone()
+: <a class="el" href="group__hash.html#ga39673348f3302b4646bd780034a5aeda">crypto.h</a>
+</li>
+<li>psa_hash_compare()
+: <a class="el" href="group__hash.html#ga0bb6dbd3c310648c3cf7d202413ff0bc">crypto.h</a>
+</li>
+<li>psa_hash_compute()
+: <a class="el" href="group__hash.html#gac69f7f19d96a56c28cf3799d11b12156">crypto.h</a>
+</li>
+<li>psa_hash_finish()
+: <a class="el" href="group__hash.html#ga4795fd06a0067b0adcd92e9627b8c97e">crypto.h</a>
+</li>
+<li>PSA_HASH_MAX_SIZE
+: <a class="el" href="crypto__sizes_8h.html#a6ce1014efbbc0bcca286ef7f9a72cb29">crypto_sizes.h</a>
+</li>
+<li>PSA_HASH_OPERATION_INIT
+: <a class="el" href="group__hash.html#ga6ab7fe8d3500bc2f21be840b4f4f8d1d">crypto.h</a>
+</li>
+<li>psa_hash_operation_t
+: <a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">crypto.h</a>
+</li>
+<li>psa_hash_setup()
+: <a class="el" href="group__hash.html#ga8d72896cf70fc4d514c5c6b978912515">crypto.h</a>
+</li>
+<li>PSA_HASH_SIZE
+: <a class="el" href="crypto__sizes_8h.html#aef340331ce3cba2b57e1fc5624bf1f99">crypto_sizes.h</a>
+</li>
+<li>psa_hash_update()
+: <a class="el" href="group__hash.html#ga65b16ef97d7f650899b7db4b7d1112ff">crypto.h</a>
+</li>
+<li>psa_hash_verify()
+: <a class="el" href="group__hash.html#ga7be923c5700c9c70ef77ee9b76d1a5c0">crypto.h</a>
+</li>
+<li>psa_import_key()
+: <a class="el" href="group__import__export.html#gac9f999cb4d098663d56095afe81a453a">crypto.h</a>
+</li>
+<li>PSA_KDF_STEP_INFO
+: <a class="el" href="group__derivation.html#ga836afe760bbda3dafc6c29631560b1a0">crypto_values.h</a>
+</li>
+<li>PSA_KDF_STEP_LABEL
+: <a class="el" href="group__derivation.html#ga9f4da10191bcb690b88756ed8470b03c">crypto_values.h</a>
+</li>
+<li>PSA_KDF_STEP_SALT
+: <a class="el" href="group__derivation.html#ga384777dac55791d8f3a1af72c847b327">crypto_values.h</a>
+</li>
+<li>PSA_KDF_STEP_SECRET
+: <a class="el" href="group__derivation.html#ga90a1995a41e26ed5ca30d2d4641d1168">crypto_values.h</a>
+</li>
+<li>psa_key_agreement()
+: <a class="el" href="group__derivation.html#ga2c7fe304cacc141ffb91553548abc5d2">crypto.h</a>
+</li>
+<li>psa_key_agreement_raw_shared_secret()
+: <a class="el" href="group__derivation.html#gaf1b12eff66a1a0020b5bdc8d0e910006">crypto.h</a>
+</li>
+<li>psa_key_derivation_input_bytes()
+: <a class="el" href="group__derivation.html#ga1b30e888db65c71f5337900848e1b03f">crypto.h</a>
+</li>
+<li>psa_key_derivation_input_key()
+: <a class="el" href="group__derivation.html#ga9e5f549aa1f6f3863a07008d3d98f91a">crypto.h</a>
+</li>
+<li>psa_key_derivation_setup()
+: <a class="el" href="group__derivation.html#ga1825696be813dfac2b8d3d02717e71c5">crypto.h</a>
+</li>
+<li>psa_key_derivation_step_t
+: <a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">crypto_types.h</a>
+</li>
+<li>PSA_KEY_EXPORT_MAX_SIZE
+: <a class="el" href="crypto__sizes_8h.html#a0aae885cc8ff92e00fb5248420b939c3">crypto_sizes.h</a>
+</li>
+<li>psa_key_handle_t
+: <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">crypto.h</a>
+</li>
+<li>psa_key_id_t
+: <a class="el" href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">crypto_types.h</a>
+</li>
+<li>PSA_KEY_LIFETIME_PERSISTENT
+: <a class="el" href="group__key__lifetimes.html#ga3713a01c5fcd5f7eae46ff22ceaf6d02">crypto_values.h</a>
+</li>
+<li>psa_key_lifetime_t
+: <a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">crypto_types.h</a>
+</li>
+<li>PSA_KEY_LIFETIME_VOLATILE
+: <a class="el" href="group__key__lifetimes.html#ga8b438870ba69489b685730d346455108">crypto_values.h</a>
+</li>
+<li>psa_key_policy_get_algorithm()
+: <a class="el" href="group__policy.html#gaadf16b89ace53e1d2cb5bcb0aef24c86">crypto.h</a>
+</li>
+<li>psa_key_policy_get_usage()
+: <a class="el" href="group__policy.html#ga7746662b7503e484774d0ecb5d8ac2ab">crypto.h</a>
+</li>
+<li>PSA_KEY_POLICY_INIT
+: <a class="el" href="group__policy.html#ga5e6bc5f550e88fdc7790f2a75e79f7c5">crypto.h</a>
+</li>
+<li>psa_key_policy_set_usage()
+: <a class="el" href="group__policy.html#gac16792fd6d375a5f76d372090df40607">crypto.h</a>
+</li>
+<li>psa_key_policy_t
+: <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">crypto.h</a>
+</li>
+<li>PSA_KEY_TYPE_AES
+: <a class="el" href="group__crypto__types.html#ga6ee54579dcf278c677eda4bb1a29575e">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_ARC4
+: <a class="el" href="group__crypto__types.html#gae4d46e83f910dcaa126000a8ed03cde9">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_CAMELLIA
+: <a class="el" href="group__crypto__types.html#gad8e5da742343fd5519f9d8a630c2ed81">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_DERIVE
+: <a class="el" href="group__crypto__types.html#gae871b2357b8593f33bfd51abbf93ebb1">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_DES
+: <a class="el" href="group__crypto__types.html#ga577562bfbbc691c820d55ec308333138">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_DH_KEYPAIR
+: <a class="el" href="group__crypto__types.html#ga39b63c6b97a62a316c0660bf72b2fdd5">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_DH_PUBLIC_KEY
+: <a class="el" href="group__crypto__types.html#ga325a340d7c72d99d3a678eb210bf6e0a">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_DSA_KEYPAIR
+: <a class="el" href="group__crypto__types.html#ga011010ee28c20388f3d89fb27088ed62">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_DSA_PUBLIC_KEY
+: <a class="el" href="group__crypto__types.html#ga5e7439c2905136366c3a876e62e5ddfc">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_ECC_KEYPAIR
+: <a class="el" href="group__crypto__types.html#gadf3ad65d157bf5282849c954bf3f51af">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_ECC_PUBLIC_KEY
+: <a class="el" href="group__crypto__types.html#gad54c03d3b47020e571a72cd01d978cf2">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_GET_CURVE
+: <a class="el" href="group__crypto__types.html#ga0c567210e6f80aa8f2aa87efa7a3a3f9">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_HMAC
+: <a class="el" href="group__crypto__types.html#ga92d989f4ca64abd00f463defd773a6f8">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_ASYMMETRIC
+: <a class="el" href="group__crypto__types.html#gab138ae2ebf2905dfbaf4154db2620939">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_DH
+: <a class="el" href="group__crypto__types.html#ga248ae35c0e2becaebbf479fc1c3a3b0e">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_DSA
+: <a class="el" href="group__crypto__types.html#ga273fdfcf23eb0624f8b63d2321cf95c1">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_ECC
+: <a class="el" href="group__crypto__types.html#ga88e01fa06b585654689a99bcc06bbe66">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_ECC_KEYPAIR
+: <a class="el" href="group__crypto__types.html#ga7bf101b671e8cf26f4cb08fcb679db4b">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY
+: <a class="el" href="group__crypto__types.html#ga5af146a173b0c84d7e737e2fb6a3c0a7">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_KEYPAIR
+: <a class="el" href="group__crypto__types.html#gac14c6d6e1b2b7f4a92a7b757465cff29">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_PUBLIC_KEY
+: <a class="el" href="group__crypto__types.html#gac674a0f059bc0cb72b47f0c517b4f45b">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_RSA
+: <a class="el" href="group__crypto__types.html#ga0e1d8f241228e49c9cadadfb4579ef1a">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_UNSTRUCTURED
+: <a class="el" href="group__crypto__types.html#gaef86ce4e810e1c2c76068ac874bfef54">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_VENDOR_DEFINED
+: <a class="el" href="group__crypto__types.html#gadbe4c086a6562aefe344bc79e51bdfd3">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_KEYPAIR_OF_PUBLIC_KEY
+: <a class="el" href="group__crypto__types.html#gaf09f1ca1de6a7e7cff0fe516f3f6c91d">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_NONE
+: <a class="el" href="group__crypto__types.html#gafce7ab2b54ce97ea5bff73f13a9f3e5b">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR
+: <a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_RAW_DATA
+: <a class="el" href="group__crypto__types.html#gaa97f92025533102616b32d571c940d80">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_RSA_KEYPAIR
+: <a class="el" href="group__crypto__types.html#ga581f50687f5d650456925278948f2799">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_RSA_PUBLIC_KEY
+: <a class="el" href="group__crypto__types.html#ga9ba0878f56c8bcd1995ac017a74f513b">crypto_values.h</a>
+</li>
+<li>psa_key_type_t
+: <a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">crypto_types.h</a>
+</li>
+<li>PSA_KEY_TYPE_VENDOR_FLAG
+: <a class="el" href="group__crypto__types.html#ga8dbaed2fdb1ebae8aa127ad3988516f7">crypto_values.h</a>
+</li>
+<li>PSA_KEY_USAGE_DECRYPT
+: <a class="el" href="group__policy.html#gac3f2d2e5983db1edde9f142ca9bf8e6a">crypto_values.h</a>
+</li>
+<li>PSA_KEY_USAGE_DERIVE
+: <a class="el" href="group__policy.html#gaf19022acc5ef23cf12477f632b48a0b2">crypto_values.h</a>
+</li>
+<li>PSA_KEY_USAGE_ENCRYPT
+: <a class="el" href="group__policy.html#ga75153b296d045d529d97203a6a995dad">crypto_values.h</a>
+</li>
+<li>PSA_KEY_USAGE_EXPORT
+: <a class="el" href="group__policy.html#ga7dddccdd1303176e87a4d20c87b589ed">crypto_values.h</a>
+</li>
+<li>PSA_KEY_USAGE_SIGN
+: <a class="el" href="group__policy.html#ga99b9f456cf59efc4b5579465407aef5a">crypto_values.h</a>
+</li>
+<li>psa_key_usage_t
+: <a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">crypto_types.h</a>
+</li>
+<li>PSA_KEY_USAGE_VERIFY
+: <a class="el" href="group__policy.html#ga39b54ffd5958b69634607924fa53cea6">crypto_values.h</a>
+</li>
+<li>psa_mac_abort()
+: <a class="el" href="group__MAC.html#gacd8dd54855ba1bc0a03f104f252884fd">crypto.h</a>
+</li>
+<li>psa_mac_compute()
+: <a class="el" href="group__MAC.html#gace78d9b51394f9d4f77952963665897a">crypto.h</a>
+</li>
+<li>PSA_MAC_FINAL_SIZE
+: <a class="el" href="crypto__sizes_8h.html#aa84c5fb384ac7cb1bfc52adde96588ee">crypto_sizes.h</a>
+</li>
+<li>PSA_MAC_MAX_SIZE
+: <a class="el" href="crypto__sizes_8h.html#a4681cc4f6226883a2160122c562ca682">crypto_sizes.h</a>
+</li>
+<li>PSA_MAC_OPERATION_INIT
+: <a class="el" href="group__MAC.html#ga441b6efc161a4573d06465bd22d9dc2d">crypto.h</a>
+</li>
+<li>psa_mac_operation_t
+: <a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">crypto.h</a>
+</li>
+<li>psa_mac_sign_finish()
+: <a class="el" href="group__MAC.html#gac22bc0125580c96724a09226cfbc97f2">crypto.h</a>
+</li>
+<li>psa_mac_sign_setup()
+: <a class="el" href="group__MAC.html#gad33f2b15119593571ca6b8e7c757ab0e">crypto.h</a>
+</li>
+<li>PSA_MAC_TRUNCATED_LENGTH
+: <a class="el" href="group__crypto__types.html#gab03726c4476174e019a08e2a04018ce8">crypto_values.h</a>
+</li>
+<li>psa_mac_update()
+: <a class="el" href="group__MAC.html#ga5560af371497babefe03c9da4e8a1c05">crypto.h</a>
+</li>
+<li>psa_mac_verify()
+: <a class="el" href="group__MAC.html#ga08e2e8c21bfe762a907266f3bdd1d07c">crypto.h</a>
+</li>
+<li>psa_mac_verify_finish()
+: <a class="el" href="group__MAC.html#gac92b2930d6728e1be4d011c05d485822">crypto.h</a>
+</li>
+<li>psa_mac_verify_setup()
+: <a class="el" href="group__MAC.html#gaa721a59ae6d085ec90c7dc918879a027">crypto.h</a>
+</li>
+<li>PSA_MAX_BLOCK_CIPHER_BLOCK_SIZE
+: <a class="el" href="crypto__sizes_8h.html#aa3cfcff0291d6da279fec8fe834d5dec">crypto_sizes.h</a>
+</li>
+<li>psa_open_key()
+: <a class="el" href="group__key__management.html#gaa9f1c848cf78b80fe2a7b18bb7ccec50">crypto.h</a>
+</li>
+<li>psa_set_generator_capacity()
+: <a class="el" href="group__generators.html#ga45676ec3c719622f95caaf926f44bb6e">crypto.h</a>
+</li>
+<li>psa_set_key_domain_parameters()
+: <a class="el" href="group__import__export.html#ga091da8d3d39137fd6ad59f2b10234300">crypto.h</a>
+</li>
+<li>psa_set_key_policy()
+: <a class="el" href="group__policy.html#ga1e2a6e50b621864f95d438222a3c640b">crypto.h</a>
+</li>
+<li>psa_status_t
+: <a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">crypto_types.h</a>
+</li>
+<li>PSA_SUCCESS
+: <a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">crypto_values.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/globals_defs.html b/docs/html/globals_defs.html
new file mode 100644
index 0000000..734e48a
--- /dev/null
+++ b/docs/html/globals_defs.html
@@ -0,0 +1,542 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: File Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>File&#160;Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li class="current"><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li class="current"><a href="#index_p"><span>p</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>PSA_AEAD_DECRYPT_OUTPUT_SIZE
+: <a class="el" href="crypto__sizes_8h.html#a1d057796166c16eb673ad1997e48a60b">crypto_sizes.h</a>
+</li>
+<li>PSA_AEAD_ENCRYPT_OUTPUT_SIZE
+: <a class="el" href="crypto__sizes_8h.html#a85667d47a7aa6c7b99a80e5273671266">crypto_sizes.h</a>
+</li>
+<li>PSA_AEAD_FINISH_OUTPUT_SIZE
+: <a class="el" href="crypto__sizes_8h.html#af45d92c1d7ef43822b8df21ab1117d3f">crypto_sizes.h</a>
+</li>
+<li>PSA_AEAD_OPERATION_INIT
+: <a class="el" href="group__aead.html#gaf52e036794c0dc6fbadd93a2b990f366">crypto.h</a>
+</li>
+<li>PSA_AEAD_TAG_LENGTH
+: <a class="el" href="crypto__sizes_8h.html#a8e3079b2e624cb8d32b94843cddada49">crypto_sizes.h</a>
+</li>
+<li>PSA_ALG_AEAD_WITH_DEFAULT_TAG_LENGTH
+: <a class="el" href="group__crypto__types.html#gaddea507e062250cda8a29407a9480d2b">crypto_values.h</a>
+</li>
+<li>PSA_ALG_AEAD_WITH_TAG_LENGTH
+: <a class="el" href="group__crypto__types.html#gaa63c520b62ab001d54d28801742fc9db">crypto_values.h</a>
+</li>
+<li>PSA_ALG_ANY_HASH
+: <a class="el" href="group__crypto__types.html#gaa1288ea8bd397a8a3f5e19e94110f2e4">crypto_values.h</a>
+</li>
+<li>PSA_ALG_ARC4
+: <a class="el" href="group__crypto__types.html#gab6a5284decb0e5e1b5b8740a41ef3c5e">crypto_values.h</a>
+</li>
+<li>PSA_ALG_CBC_NO_PADDING
+: <a class="el" href="group__crypto__types.html#gacb332d72716958880ee7f97d8365ae66">crypto_values.h</a>
+</li>
+<li>PSA_ALG_CBC_PKCS7
+: <a class="el" href="group__crypto__types.html#gaef50d2e9716eb6d476046608e4e0c78c">crypto_values.h</a>
+</li>
+<li>PSA_ALG_CTR
+: <a class="el" href="group__crypto__types.html#gad318309706a769cffdc64e4c7e06b2e9">crypto_values.h</a>
+</li>
+<li>PSA_ALG_DETERMINISTIC_ECDSA
+: <a class="el" href="group__crypto__types.html#ga11da566bcd341661c8de921e2ca5ed03">crypto_values.h</a>
+</li>
+<li>PSA_ALG_DSA
+: <a class="el" href="group__crypto__types.html#ga9a68efdddff5ae95f104a1416b12742e">crypto_values.h</a>
+</li>
+<li>PSA_ALG_ECDH
+: <a class="el" href="group__crypto__types.html#gab2dbcf71b63785e7dd7b54a100edee43">crypto_values.h</a>
+</li>
+<li>PSA_ALG_ECDSA
+: <a class="el" href="group__crypto__types.html#ga7e3ce9f514a227d5ba5d8318870452e3">crypto_values.h</a>
+</li>
+<li>PSA_ALG_ECDSA_ANY
+: <a class="el" href="group__crypto__types.html#ga51d6b6044a62e33cae0cf64bfc3b22a4">crypto_values.h</a>
+</li>
+<li>PSA_ALG_FFDH
+: <a class="el" href="group__crypto__types.html#ga0ebbb6f93a05b6511e6f108ffd2d1eb4">crypto_values.h</a>
+</li>
+<li>PSA_ALG_FULL_LENGTH_MAC
+: <a class="el" href="group__crypto__types.html#gaa05a8d99634f3350597ac9284fb70cb1">crypto_values.h</a>
+</li>
+<li>PSA_ALG_HKDF
+: <a class="el" href="group__crypto__types.html#ga32a888fb360e6e25cab8a343772c4a82">crypto_values.h</a>
+</li>
+<li>PSA_ALG_HMAC
+: <a class="el" href="group__crypto__types.html#ga70f397425684b3efcde1e0e34c28261f">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_AEAD
+: <a class="el" href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_ASYMMETRIC_ENCRYPTION
+: <a class="el" href="group__crypto__types.html#ga41d2ee937d54efd76bd54a97b2ebc08a">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_BLOCK_CIPHER_MAC
+: <a class="el" href="group__crypto__types.html#gae49d1eb601125d65a5c5b252aa45479e">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_CIPHER
+: <a class="el" href="group__crypto__types.html#ga1d1a5a402ad89a2e68f12bfb535490eb">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_ECDH
+: <a class="el" href="group__crypto__types.html#ga9d9b6533d2a6bea7bac7ae01facb820d">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_FFDH
+: <a class="el" href="group__crypto__types.html#gaa3cf76164cd9375af4fb8a291078a19e">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_HASH
+: <a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_HASH_AND_SIGN
+: <a class="el" href="group__crypto__types.html#gad8a8ea0536975363b66410cdeafe38b6">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_HKDF
+: <a class="el" href="group__crypto__types.html#ga1979d0a76fcee6164cf2e65960f38db2">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_HMAC
+: <a class="el" href="group__crypto__types.html#ga4a050c3c3cbc6eb96418f18847601c8a">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_KEY_AGREEMENT
+: <a class="el" href="group__crypto__types.html#ga59753742cb06553bd22751bbef472b6f">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_KEY_DERIVATION
+: <a class="el" href="group__crypto__types.html#gaf8b90c648aa53dbd06c236695e300cd0">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_KEY_SELECTION
+: <a class="el" href="group__crypto__types.html#ga51b1834ee5e98c6a83c2cfc7699f9077">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_MAC
+: <a class="el" href="group__crypto__types.html#gaca7aee4c9dde316b3b1a150a26eab776">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_SIGN
+: <a class="el" href="group__crypto__types.html#ga6d490d0904e0698f6c1268a89d72ff31">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_STREAM_CIPHER
+: <a class="el" href="group__crypto__types.html#gacfec68e0c6175e02e1b2ebc97df383c0">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_TLS12_PRF
+: <a class="el" href="group__crypto__types.html#gaa3c18890c50222e5219f40ade8927e66">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_TLS12_PSK_TO_MS
+: <a class="el" href="group__crypto__types.html#gab25ecc074a93fd11069bedfbba5a287b">crypto_values.h</a>
+</li>
+<li>PSA_ALG_IS_WILDCARD
+: <a class="el" href="group__crypto__types.html#gacf83d7430e82b97cecb8b26ca6fa1426">crypto_values.h</a>
+</li>
+<li>PSA_ALG_KEY_AGREEMENT
+: <a class="el" href="group__crypto__types.html#ga78bb81cffb87a635c247725eeb2a2682">crypto_values.h</a>
+</li>
+<li>PSA_ALG_RSA_OAEP
+: <a class="el" href="group__crypto__types.html#gaa1235dc3fdd9839c6c1b1a9857344c76">crypto_values.h</a>
+</li>
+<li>PSA_ALG_RSA_PKCS1V15_CRYPT
+: <a class="el" href="group__crypto__types.html#ga4c540d3abe43fb9abcb94f2bc51acef9">crypto_values.h</a>
+</li>
+<li>PSA_ALG_RSA_PKCS1V15_SIGN
+: <a class="el" href="group__crypto__types.html#ga702ff75385a6ae7d4247033f479439af">crypto_values.h</a>
+</li>
+<li>PSA_ALG_RSA_PKCS1V15_SIGN_RAW
+: <a class="el" href="group__crypto__types.html#ga4215e2a78dcf834e9a625927faa2a817">crypto_values.h</a>
+</li>
+<li>PSA_ALG_RSA_PSS
+: <a class="el" href="group__crypto__types.html#ga62152bf4cb4bf6aace5e1be8f143564d">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA3_224
+: <a class="el" href="group__crypto__types.html#ga16f5fe34ccce68c2fada1224c054a999">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA3_256
+: <a class="el" href="group__crypto__types.html#gaace70d9515489bbe3c5e7ac1b7d9155b">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA3_384
+: <a class="el" href="group__crypto__types.html#gab0f079257ea75e2acfe2fc3b38c78cd8">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA3_512
+: <a class="el" href="group__crypto__types.html#ga37e5dbe936dddb155e76f2997de27188">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA_224
+: <a class="el" href="group__crypto__types.html#ga25d6a3244d10a7148fe6b026d1979f7b">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA_256
+: <a class="el" href="group__crypto__types.html#ga619471f978e13cdd0a1e37145e4bf341">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA_384
+: <a class="el" href="group__crypto__types.html#ga58af64dd9a86a287e8da9ed7739eead4">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA_512
+: <a class="el" href="group__crypto__types.html#gafba3ae409f46d3dd7f37a0910660c3e9">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA_512_224
+: <a class="el" href="group__crypto__types.html#ga3fe2d7c3c80e3186ca78d16a35d5d931">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SHA_512_256
+: <a class="el" href="group__crypto__types.html#ga5910b3964c14e9613e8643a45b09c2d4">crypto_values.h</a>
+</li>
+<li>PSA_ALG_SIGN_GET_HASH
+: <a class="el" href="group__crypto__types.html#ga24cf6d7bcd2b9aeeeff86f07b6c674e3">crypto_values.h</a>
+</li>
+<li>PSA_ALG_TLS12_PRF
+: <a class="el" href="group__crypto__types.html#ga6d5623c2ccda1d4a84e34351af8382d5">crypto_values.h</a>
+</li>
+<li>PSA_ALG_TLS12_PSK_TO_MS
+: <a class="el" href="group__crypto__types.html#ga039ec797f15d1635d9b2e09a611f8a68">crypto_values.h</a>
+</li>
+<li>PSA_ALG_TLS12_PSK_TO_MS_MAX_PSK_LEN
+: <a class="el" href="crypto__sizes_8h.html#ab589ea3b86f2bfa18880459299c58f8a">crypto_sizes.h</a>
+</li>
+<li>PSA_ALG_TRUNCATED_MAC
+: <a class="el" href="group__crypto__types.html#gaf36137110baf7bb13c5028fd62c64276">crypto_values.h</a>
+</li>
+<li>PSA_ALG_XTS
+: <a class="el" href="group__crypto__types.html#gaa722c0e426a797fd6d99623f59748125">crypto_values.h</a>
+</li>
+<li>PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE
+: <a class="el" href="crypto__sizes_8h.html#a61a246f3eac41989821d982e56fea6c1">crypto_sizes.h</a>
+</li>
+<li>PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE
+: <a class="el" href="crypto__sizes_8h.html#a66ba3bd93e5ec52870ccc3848778bad8">crypto_sizes.h</a>
+</li>
+<li>PSA_ASYMMETRIC_SIGN_OUTPUT_SIZE
+: <a class="el" href="crypto__sizes_8h.html#a77565b9b4fe6d8730fd2120f4c8378ab">crypto_sizes.h</a>
+</li>
+<li>PSA_ASYMMETRIC_SIGNATURE_MAX_SIZE
+: <a class="el" href="crypto__sizes_8h.html#ad755101764dba14589e5919ee41be7ca">crypto_sizes.h</a>
+</li>
+<li>PSA_BLOCK_CIPHER_BLOCK_SIZE
+: <a class="el" href="group__crypto__types.html#gacaa366bdeb0413e63e87a667c5457b2e">crypto_values.h</a>
+</li>
+<li>PSA_CIPHER_OPERATION_INIT
+: <a class="el" href="group__cipher.html#ga2da0541aabf9a4995cf2004e36311919">crypto.h</a>
+</li>
+<li>PSA_CRYPTO_GENERATOR_INIT
+: <a class="el" href="group__generators.html#ga4788b471385fc667876fbd8a0d3fe062">crypto.h</a>
+</li>
+<li>PSA_ECDSA_SIGNATURE_SIZE
+: <a class="el" href="crypto__sizes_8h.html#a10c472a35f04051add6b20cc228ffc11">crypto_sizes.h</a>
+</li>
+<li>PSA_ERROR_BAD_STATE
+: <a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_BUFFER_TOO_SMALL
+: <a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_COMMUNICATION_FAILURE
+: <a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_EMPTY_SLOT
+: <a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_HARDWARE_FAILURE
+: <a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_INSUFFICIENT_CAPACITY
+: <a class="el" href="group__error.html#gaf1fa61f72e9e5b4a848c991bea495767">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_INSUFFICIENT_ENTROPY
+: <a class="el" href="group__error.html#ga4deb59fec02297ec5d8b42178323f675">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_INSUFFICIENT_MEMORY
+: <a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_INSUFFICIENT_STORAGE
+: <a class="el" href="group__error.html#ga897a45eb206a6f6b7be7ffbe36f0d766">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_INVALID_ARGUMENT
+: <a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_INVALID_HANDLE
+: <a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_INVALID_PADDING
+: <a class="el" href="group__error.html#gabe29594edbfb152cf153975b0597ac48">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_INVALID_SIGNATURE
+: <a class="el" href="group__error.html#ga35927f755d232c4766de600f2c49e9f2">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_NOT_PERMITTED
+: <a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_NOT_SUPPORTED
+: <a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_OCCUPIED_SLOT
+: <a class="el" href="group__error.html#gac2fee3a51249fbea45360aaa911f3e58">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_STORAGE_FAILURE
+: <a class="el" href="group__error.html#gadd169a1af2707862b95fb9df91dfc37d">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_TAMPERING_DETECTED
+: <a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">crypto_values.h</a>
+</li>
+<li>PSA_ERROR_UNKNOWN_ERROR
+: <a class="el" href="group__error.html#ga24d5fdcdd759f846f79d9e581c63a83f">crypto_values.h</a>
+</li>
+<li>PSA_GENERATOR_UNBRIDLED_CAPACITY
+: <a class="el" href="group__generators.html#gac3222df9b9ecca4d33ae56a7b8fbb1c9">crypto.h</a>
+</li>
+<li>PSA_HASH_MAX_SIZE
+: <a class="el" href="crypto__sizes_8h.html#a6ce1014efbbc0bcca286ef7f9a72cb29">crypto_sizes.h</a>
+</li>
+<li>PSA_HASH_OPERATION_INIT
+: <a class="el" href="group__hash.html#ga6ab7fe8d3500bc2f21be840b4f4f8d1d">crypto.h</a>
+</li>
+<li>PSA_HASH_SIZE
+: <a class="el" href="crypto__sizes_8h.html#aef340331ce3cba2b57e1fc5624bf1f99">crypto_sizes.h</a>
+</li>
+<li>PSA_KDF_STEP_INFO
+: <a class="el" href="group__derivation.html#ga836afe760bbda3dafc6c29631560b1a0">crypto_values.h</a>
+</li>
+<li>PSA_KDF_STEP_LABEL
+: <a class="el" href="group__derivation.html#ga9f4da10191bcb690b88756ed8470b03c">crypto_values.h</a>
+</li>
+<li>PSA_KDF_STEP_SALT
+: <a class="el" href="group__derivation.html#ga384777dac55791d8f3a1af72c847b327">crypto_values.h</a>
+</li>
+<li>PSA_KDF_STEP_SECRET
+: <a class="el" href="group__derivation.html#ga90a1995a41e26ed5ca30d2d4641d1168">crypto_values.h</a>
+</li>
+<li>PSA_KEY_EXPORT_MAX_SIZE
+: <a class="el" href="crypto__sizes_8h.html#a0aae885cc8ff92e00fb5248420b939c3">crypto_sizes.h</a>
+</li>
+<li>PSA_KEY_LIFETIME_PERSISTENT
+: <a class="el" href="group__key__lifetimes.html#ga3713a01c5fcd5f7eae46ff22ceaf6d02">crypto_values.h</a>
+</li>
+<li>PSA_KEY_LIFETIME_VOLATILE
+: <a class="el" href="group__key__lifetimes.html#ga8b438870ba69489b685730d346455108">crypto_values.h</a>
+</li>
+<li>PSA_KEY_POLICY_INIT
+: <a class="el" href="group__policy.html#ga5e6bc5f550e88fdc7790f2a75e79f7c5">crypto.h</a>
+</li>
+<li>PSA_KEY_TYPE_AES
+: <a class="el" href="group__crypto__types.html#ga6ee54579dcf278c677eda4bb1a29575e">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_ARC4
+: <a class="el" href="group__crypto__types.html#gae4d46e83f910dcaa126000a8ed03cde9">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_CAMELLIA
+: <a class="el" href="group__crypto__types.html#gad8e5da742343fd5519f9d8a630c2ed81">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_DERIVE
+: <a class="el" href="group__crypto__types.html#gae871b2357b8593f33bfd51abbf93ebb1">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_DES
+: <a class="el" href="group__crypto__types.html#ga577562bfbbc691c820d55ec308333138">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_DH_KEYPAIR
+: <a class="el" href="group__crypto__types.html#ga39b63c6b97a62a316c0660bf72b2fdd5">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_DH_PUBLIC_KEY
+: <a class="el" href="group__crypto__types.html#ga325a340d7c72d99d3a678eb210bf6e0a">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_DSA_KEYPAIR
+: <a class="el" href="group__crypto__types.html#ga011010ee28c20388f3d89fb27088ed62">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_DSA_PUBLIC_KEY
+: <a class="el" href="group__crypto__types.html#ga5e7439c2905136366c3a876e62e5ddfc">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_ECC_KEYPAIR
+: <a class="el" href="group__crypto__types.html#gadf3ad65d157bf5282849c954bf3f51af">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_ECC_PUBLIC_KEY
+: <a class="el" href="group__crypto__types.html#gad54c03d3b47020e571a72cd01d978cf2">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_GET_CURVE
+: <a class="el" href="group__crypto__types.html#ga0c567210e6f80aa8f2aa87efa7a3a3f9">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_HMAC
+: <a class="el" href="group__crypto__types.html#ga92d989f4ca64abd00f463defd773a6f8">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_ASYMMETRIC
+: <a class="el" href="group__crypto__types.html#gab138ae2ebf2905dfbaf4154db2620939">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_DH
+: <a class="el" href="group__crypto__types.html#ga248ae35c0e2becaebbf479fc1c3a3b0e">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_DSA
+: <a class="el" href="group__crypto__types.html#ga273fdfcf23eb0624f8b63d2321cf95c1">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_ECC
+: <a class="el" href="group__crypto__types.html#ga88e01fa06b585654689a99bcc06bbe66">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_ECC_KEYPAIR
+: <a class="el" href="group__crypto__types.html#ga7bf101b671e8cf26f4cb08fcb679db4b">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY
+: <a class="el" href="group__crypto__types.html#ga5af146a173b0c84d7e737e2fb6a3c0a7">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_KEYPAIR
+: <a class="el" href="group__crypto__types.html#gac14c6d6e1b2b7f4a92a7b757465cff29">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_PUBLIC_KEY
+: <a class="el" href="group__crypto__types.html#gac674a0f059bc0cb72b47f0c517b4f45b">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_RSA
+: <a class="el" href="group__crypto__types.html#ga0e1d8f241228e49c9cadadfb4579ef1a">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_UNSTRUCTURED
+: <a class="el" href="group__crypto__types.html#gaef86ce4e810e1c2c76068ac874bfef54">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_IS_VENDOR_DEFINED
+: <a class="el" href="group__crypto__types.html#gadbe4c086a6562aefe344bc79e51bdfd3">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_KEYPAIR_OF_PUBLIC_KEY
+: <a class="el" href="group__crypto__types.html#gaf09f1ca1de6a7e7cff0fe516f3f6c91d">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_NONE
+: <a class="el" href="group__crypto__types.html#gafce7ab2b54ce97ea5bff73f13a9f3e5b">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR
+: <a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_RAW_DATA
+: <a class="el" href="group__crypto__types.html#gaa97f92025533102616b32d571c940d80">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_RSA_KEYPAIR
+: <a class="el" href="group__crypto__types.html#ga581f50687f5d650456925278948f2799">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_RSA_PUBLIC_KEY
+: <a class="el" href="group__crypto__types.html#ga9ba0878f56c8bcd1995ac017a74f513b">crypto_values.h</a>
+</li>
+<li>PSA_KEY_TYPE_VENDOR_FLAG
+: <a class="el" href="group__crypto__types.html#ga8dbaed2fdb1ebae8aa127ad3988516f7">crypto_values.h</a>
+</li>
+<li>PSA_KEY_USAGE_DECRYPT
+: <a class="el" href="group__policy.html#gac3f2d2e5983db1edde9f142ca9bf8e6a">crypto_values.h</a>
+</li>
+<li>PSA_KEY_USAGE_DERIVE
+: <a class="el" href="group__policy.html#gaf19022acc5ef23cf12477f632b48a0b2">crypto_values.h</a>
+</li>
+<li>PSA_KEY_USAGE_ENCRYPT
+: <a class="el" href="group__policy.html#ga75153b296d045d529d97203a6a995dad">crypto_values.h</a>
+</li>
+<li>PSA_KEY_USAGE_EXPORT
+: <a class="el" href="group__policy.html#ga7dddccdd1303176e87a4d20c87b589ed">crypto_values.h</a>
+</li>
+<li>PSA_KEY_USAGE_SIGN
+: <a class="el" href="group__policy.html#ga99b9f456cf59efc4b5579465407aef5a">crypto_values.h</a>
+</li>
+<li>PSA_KEY_USAGE_VERIFY
+: <a class="el" href="group__policy.html#ga39b54ffd5958b69634607924fa53cea6">crypto_values.h</a>
+</li>
+<li>PSA_MAC_FINAL_SIZE
+: <a class="el" href="crypto__sizes_8h.html#aa84c5fb384ac7cb1bfc52adde96588ee">crypto_sizes.h</a>
+</li>
+<li>PSA_MAC_MAX_SIZE
+: <a class="el" href="crypto__sizes_8h.html#a4681cc4f6226883a2160122c562ca682">crypto_sizes.h</a>
+</li>
+<li>PSA_MAC_OPERATION_INIT
+: <a class="el" href="group__MAC.html#ga441b6efc161a4573d06465bd22d9dc2d">crypto.h</a>
+</li>
+<li>PSA_MAC_TRUNCATED_LENGTH
+: <a class="el" href="group__crypto__types.html#gab03726c4476174e019a08e2a04018ce8">crypto_values.h</a>
+</li>
+<li>PSA_MAX_BLOCK_CIPHER_BLOCK_SIZE
+: <a class="el" href="crypto__sizes_8h.html#aa3cfcff0291d6da279fec8fe834d5dec">crypto_sizes.h</a>
+</li>
+<li>PSA_SUCCESS
+: <a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">crypto_values.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/globals_func.html b/docs/html/globals_func.html
new file mode 100644
index 0000000..881bba1
--- /dev/null
+++ b/docs/html/globals_func.html
@@ -0,0 +1,326 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: File Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>File&#160;Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li class="current"><a href="#index_p"><span>p</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>psa_aead_abort()
+: <a class="el" href="group__aead.html#gae8a5f93d92318c8f592ee9fbb9d36ba0">crypto.h</a>
+</li>
+<li>psa_aead_decrypt()
+: <a class="el" href="group__aead.html#gaa8ce6527f2e227f1071fadbf2099793b">crypto.h</a>
+</li>
+<li>psa_aead_decrypt_setup()
+: <a class="el" href="group__aead.html#ga439896519d4a367ec86b47f201884152">crypto.h</a>
+</li>
+<li>psa_aead_encrypt()
+: <a class="el" href="group__aead.html#ga44de092cf58bb6c820c5c80a6c51610d">crypto.h</a>
+</li>
+<li>psa_aead_encrypt_setup()
+: <a class="el" href="group__aead.html#ga47265dc4852f1476f852752218fd12b2">crypto.h</a>
+</li>
+<li>psa_aead_finish()
+: <a class="el" href="group__aead.html#ga759791bbe1763b377c3b5447641f1fc8">crypto.h</a>
+</li>
+<li>psa_aead_generate_nonce()
+: <a class="el" href="group__aead.html#ga3eadcf2a29f662129ea4fb3454969ba2">crypto.h</a>
+</li>
+<li>psa_aead_set_lengths()
+: <a class="el" href="group__aead.html#gad3431e28d05002c2a7b0760610176050">crypto.h</a>
+</li>
+<li>psa_aead_set_nonce()
+: <a class="el" href="group__aead.html#ga40641d0721ca7fe01bbcd9ef635fbc46">crypto.h</a>
+</li>
+<li>psa_aead_update()
+: <a class="el" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">crypto.h</a>
+</li>
+<li>psa_aead_update_ad()
+: <a class="el" href="group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569">crypto.h</a>
+</li>
+<li>psa_aead_verify()
+: <a class="el" href="group__aead.html#gaaed211fc61977c859d6ff07f39f59219">crypto.h</a>
+</li>
+<li>psa_allocate_key()
+: <a class="el" href="group__key__management.html#ga40094b77b7a42b9c8e158395113f1a35">crypto.h</a>
+</li>
+<li>psa_asymmetric_decrypt()
+: <a class="el" href="group__asymmetric.html#ga34b55fbaee23dba1a677186fc66a556e">crypto.h</a>
+</li>
+<li>psa_asymmetric_encrypt()
+: <a class="el" href="group__asymmetric.html#gad429293b7b0bf2a830b9540a02552004">crypto.h</a>
+</li>
+<li>psa_asymmetric_sign()
+: <a class="el" href="group__asymmetric.html#ga1b0db9d345b5048cdd39357ac2d56c07">crypto.h</a>
+</li>
+<li>psa_asymmetric_verify()
+: <a class="el" href="group__asymmetric.html#ga1b8e964c8d927e3d632325d762959eb7">crypto.h</a>
+</li>
+<li>psa_cipher_abort()
+: <a class="el" href="group__cipher.html#gaad482cdca2098bca0620596aaa02eaa4">crypto.h</a>
+</li>
+<li>psa_cipher_decrypt()
+: <a class="el" href="group__cipher.html#ga43d5991711ec45c98af0c1d99f6e0216">crypto.h</a>
+</li>
+<li>psa_cipher_decrypt_setup()
+: <a class="el" href="group__cipher.html#gaddf8504e5367cd0efb4415bdec004f44">crypto.h</a>
+</li>
+<li>psa_cipher_encrypt()
+: <a class="el" href="group__cipher.html#gac76dda492d9a1ba6b327bff610ec17b2">crypto.h</a>
+</li>
+<li>psa_cipher_encrypt_setup()
+: <a class="el" href="group__cipher.html#ga2a7fc79a9d150d42dba99f40ee3a185e">crypto.h</a>
+</li>
+<li>psa_cipher_finish()
+: <a class="el" href="group__cipher.html#ga1dcb58b8befe23f8a4d7a1d49c99249b">crypto.h</a>
+</li>
+<li>psa_cipher_generate_iv()
+: <a class="el" href="group__cipher.html#ga44857cf5e0c3d134a3c560f8ff5b50aa">crypto.h</a>
+</li>
+<li>psa_cipher_set_iv()
+: <a class="el" href="group__cipher.html#ga1359b2101f31637496ce7cc36c6e3d42">crypto.h</a>
+</li>
+<li>psa_cipher_update()
+: <a class="el" href="group__cipher.html#gafd0caea99cf1052527e4089d37f5ab91">crypto.h</a>
+</li>
+<li>psa_close_key()
+: <a class="el" href="group__key__management.html#gaa09b720d299dfe6b9f41c36e448078eb">crypto.h</a>
+</li>
+<li>psa_copy_key()
+: <a class="el" href="group__import__export.html#ga5c1c24176cfb1517a8806235b3162a9d">crypto.h</a>
+</li>
+<li>psa_create_key()
+: <a class="el" href="group__key__management.html#ga4108f255d3eaa6d23a7a14b684af8d7c">crypto.h</a>
+</li>
+<li>psa_crypto_init()
+: <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9">crypto.h</a>
+</li>
+<li>psa_destroy_key()
+: <a class="el" href="group__import__export.html#ga165085fc1bc7a78b91792fdd94ae102c">crypto.h</a>
+</li>
+<li>psa_export_key()
+: <a class="el" href="group__import__export.html#ga902b9a7a6cf34d6111668be777b05eaf">crypto.h</a>
+</li>
+<li>psa_export_public_key()
+: <a class="el" href="group__import__export.html#gad760d1f0d4e60972c78cbb4c8a528256">crypto.h</a>
+</li>
+<li>psa_generate_key()
+: <a class="el" href="group__random.html#ga72921520494b4f007a3afb904cd9ecdd">crypto.h</a>
+</li>
+<li>psa_generate_random()
+: <a class="el" href="group__random.html#ga1985eae417dfbccedf50d5fff54ea8c5">crypto.h</a>
+</li>
+<li>psa_generator_abort()
+: <a class="el" href="group__generators.html#ga563ca64537d90368899286b36d8cf7f3">crypto.h</a>
+</li>
+<li>psa_generator_import_key()
+: <a class="el" href="group__generators.html#ga7fcdf07cd37279ca167db484053da894">crypto.h</a>
+</li>
+<li>psa_generator_read()
+: <a class="el" href="group__generators.html#gab5712ad29b78c2b170e64cc5bcfc1bce">crypto.h</a>
+</li>
+<li>psa_get_generator_capacity()
+: <a class="el" href="group__generators.html#ga7453491e3b440193be2c5dccc2040fd2">crypto.h</a>
+</li>
+<li>psa_get_key_domain_parameters()
+: <a class="el" href="group__import__export.html#gae260b92e32ac5d63f7dfc6ffdf6536f7">crypto.h</a>
+</li>
+<li>psa_get_key_information()
+: <a class="el" href="group__import__export.html#gae8939902d6977ea8ad13eb7b4db9a042">crypto.h</a>
+</li>
+<li>psa_get_key_lifetime()
+: <a class="el" href="group__key__management.html#ga1e4825ab59260aeb3bdbb3ff07210022">crypto.h</a>
+</li>
+<li>psa_get_key_policy()
+: <a class="el" href="group__policy.html#gaed087d1386b807edee66b2e445ba9111">crypto.h</a>
+</li>
+<li>psa_hash_abort()
+: <a class="el" href="group__hash.html#gab0b4d5f9912a615559497a467b532928">crypto.h</a>
+</li>
+<li>psa_hash_clone()
+: <a class="el" href="group__hash.html#ga39673348f3302b4646bd780034a5aeda">crypto.h</a>
+</li>
+<li>psa_hash_compare()
+: <a class="el" href="group__hash.html#ga0bb6dbd3c310648c3cf7d202413ff0bc">crypto.h</a>
+</li>
+<li>psa_hash_compute()
+: <a class="el" href="group__hash.html#gac69f7f19d96a56c28cf3799d11b12156">crypto.h</a>
+</li>
+<li>psa_hash_finish()
+: <a class="el" href="group__hash.html#ga4795fd06a0067b0adcd92e9627b8c97e">crypto.h</a>
+</li>
+<li>psa_hash_setup()
+: <a class="el" href="group__hash.html#ga8d72896cf70fc4d514c5c6b978912515">crypto.h</a>
+</li>
+<li>psa_hash_update()
+: <a class="el" href="group__hash.html#ga65b16ef97d7f650899b7db4b7d1112ff">crypto.h</a>
+</li>
+<li>psa_hash_verify()
+: <a class="el" href="group__hash.html#ga7be923c5700c9c70ef77ee9b76d1a5c0">crypto.h</a>
+</li>
+<li>psa_import_key()
+: <a class="el" href="group__import__export.html#gac9f999cb4d098663d56095afe81a453a">crypto.h</a>
+</li>
+<li>psa_key_agreement()
+: <a class="el" href="group__derivation.html#ga2c7fe304cacc141ffb91553548abc5d2">crypto.h</a>
+</li>
+<li>psa_key_agreement_raw_shared_secret()
+: <a class="el" href="group__derivation.html#gaf1b12eff66a1a0020b5bdc8d0e910006">crypto.h</a>
+</li>
+<li>psa_key_derivation_input_bytes()
+: <a class="el" href="group__derivation.html#ga1b30e888db65c71f5337900848e1b03f">crypto.h</a>
+</li>
+<li>psa_key_derivation_input_key()
+: <a class="el" href="group__derivation.html#ga9e5f549aa1f6f3863a07008d3d98f91a">crypto.h</a>
+</li>
+<li>psa_key_derivation_setup()
+: <a class="el" href="group__derivation.html#ga1825696be813dfac2b8d3d02717e71c5">crypto.h</a>
+</li>
+<li>psa_key_policy_get_algorithm()
+: <a class="el" href="group__policy.html#gaadf16b89ace53e1d2cb5bcb0aef24c86">crypto.h</a>
+</li>
+<li>psa_key_policy_get_usage()
+: <a class="el" href="group__policy.html#ga7746662b7503e484774d0ecb5d8ac2ab">crypto.h</a>
+</li>
+<li>psa_key_policy_set_usage()
+: <a class="el" href="group__policy.html#gac16792fd6d375a5f76d372090df40607">crypto.h</a>
+</li>
+<li>psa_mac_abort()
+: <a class="el" href="group__MAC.html#gacd8dd54855ba1bc0a03f104f252884fd">crypto.h</a>
+</li>
+<li>psa_mac_compute()
+: <a class="el" href="group__MAC.html#gace78d9b51394f9d4f77952963665897a">crypto.h</a>
+</li>
+<li>psa_mac_sign_finish()
+: <a class="el" href="group__MAC.html#gac22bc0125580c96724a09226cfbc97f2">crypto.h</a>
+</li>
+<li>psa_mac_sign_setup()
+: <a class="el" href="group__MAC.html#gad33f2b15119593571ca6b8e7c757ab0e">crypto.h</a>
+</li>
+<li>psa_mac_update()
+: <a class="el" href="group__MAC.html#ga5560af371497babefe03c9da4e8a1c05">crypto.h</a>
+</li>
+<li>psa_mac_verify()
+: <a class="el" href="group__MAC.html#ga08e2e8c21bfe762a907266f3bdd1d07c">crypto.h</a>
+</li>
+<li>psa_mac_verify_finish()
+: <a class="el" href="group__MAC.html#gac92b2930d6728e1be4d011c05d485822">crypto.h</a>
+</li>
+<li>psa_mac_verify_setup()
+: <a class="el" href="group__MAC.html#gaa721a59ae6d085ec90c7dc918879a027">crypto.h</a>
+</li>
+<li>psa_open_key()
+: <a class="el" href="group__key__management.html#gaa9f1c848cf78b80fe2a7b18bb7ccec50">crypto.h</a>
+</li>
+<li>psa_set_generator_capacity()
+: <a class="el" href="group__generators.html#ga45676ec3c719622f95caaf926f44bb6e">crypto.h</a>
+</li>
+<li>psa_set_key_domain_parameters()
+: <a class="el" href="group__import__export.html#ga091da8d3d39137fd6ad59f2b10234300">crypto.h</a>
+</li>
+<li>psa_set_key_policy()
+: <a class="el" href="group__policy.html#ga1e2a6e50b621864f95d438222a3c640b">crypto.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/globals_type.html b/docs/html/globals_type.html
new file mode 100644
index 0000000..aa3e8ad
--- /dev/null
+++ b/docs/html/globals_type.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: File Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>File&#160;Members</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>psa_aead_operation_t
+: <a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">crypto.h</a>
+</li>
+<li>psa_algorithm_t
+: <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">crypto_types.h</a>
+</li>
+<li>psa_cipher_operation_t
+: <a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">crypto.h</a>
+</li>
+<li>psa_crypto_generator_t
+: <a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">crypto.h</a>
+</li>
+<li>psa_ecc_curve_t
+: <a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">crypto_types.h</a>
+</li>
+<li>psa_hash_operation_t
+: <a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">crypto.h</a>
+</li>
+<li>psa_key_derivation_step_t
+: <a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">crypto_types.h</a>
+</li>
+<li>psa_key_handle_t
+: <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">crypto.h</a>
+</li>
+<li>psa_key_id_t
+: <a class="el" href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">crypto_types.h</a>
+</li>
+<li>psa_key_lifetime_t
+: <a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">crypto_types.h</a>
+</li>
+<li>psa_key_policy_t
+: <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">crypto.h</a>
+</li>
+<li>psa_key_type_t
+: <a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">crypto_types.h</a>
+</li>
+<li>psa_key_usage_t
+: <a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">crypto_types.h</a>
+</li>
+<li>psa_mac_operation_t
+: <a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">crypto.h</a>
+</li>
+<li>psa_status_t
+: <a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">crypto_types.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/graph_legend.html b/docs/html/graph_legend.html
new file mode 100644
index 0000000..76ec0a9
--- /dev/null
+++ b/docs/html/graph_legend.html
@@ -0,0 +1,120 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Graph Legend</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Graph Legend</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>This page explains how to interpret the graphs that are generated by doxygen.</p>
+<p>Consider the following example: </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;/*! Invisible class because of truncation */</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;class Invisible { };</div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;/*! Truncated class, inheritance relation is hidden */</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;class Truncated : public Invisible { };</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;</div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;/* Class not documented with doxygen comments */</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;class Undocumented { };</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;/*! Class that is inherited using public inheritance */</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;class PublicBase : public Truncated { };</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;/*! A template class */</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;template&lt;class T&gt; class Templ { };</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;/*! Class that is inherited using protected inheritance */</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;class ProtectedBase { };</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;/*! Class that is inherited using private inheritance */</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;class PrivateBase { };</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;/*! Class that is used by the Inherited class */</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;class Used { };</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;/*! Super class that inherits a number of other classes */</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;class Inherited : public PublicBase,</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;                  protected ProtectedBase,</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;                  private PrivateBase,</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;                  public Undocumented,</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;                  public Templ&lt;int&gt;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;{</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;  private:</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    Used *m_usedClass;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;};</div></div><!-- fragment --><p> This will result in the following graph:</p>
+<center><div class="image">
+<img src="graph_legend.png" />
+</div>
+</center><p>The boxes in the above graph have the following meaning: </p>
+<ul>
+<li>
+A filled gray box represents the struct or class for which the graph is generated. </li>
+<li>
+A box with a black border denotes a documented struct or class. </li>
+<li>
+A box with a gray border denotes an undocumented struct or class. </li>
+<li>
+A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries. </li>
+</ul>
+<p>The arrows have the following meaning: </p>
+<ul>
+<li>
+A dark blue arrow is used to visualize a public inheritance relation between two classes. </li>
+<li>
+A dark green arrow is used for protected inheritance. </li>
+<li>
+A dark red arrow is used for private inheritance. </li>
+<li>
+A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible. </li>
+<li>
+A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance. </li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/graph_legend.md5 b/docs/html/graph_legend.md5
new file mode 100644
index 0000000..a06ed05
--- /dev/null
+++ b/docs/html/graph_legend.md5
@@ -0,0 +1 @@
+387ff8eb65306fa251338d3c9bd7bfff
\ No newline at end of file
diff --git a/docs/html/graph_legend.png b/docs/html/graph_legend.png
new file mode 100644
index 0000000..37f264e
--- /dev/null
+++ b/docs/html/graph_legend.png
Binary files differ
diff --git a/docs/html/group__MAC.html b/docs/html/group__MAC.html
new file mode 100644
index 0000000..dd76896
--- /dev/null
+++ b/docs/html/group__MAC.html
@@ -0,0 +1,679 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Message authentication codes</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Message authentication codes</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga441b6efc161a4573d06465bd22d9dc2d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#ga441b6efc161a4573d06465bd22d9dc2d">PSA_MAC_OPERATION_INIT</a>&#160;&#160;&#160;{0}</td></tr>
+<tr class="separator:ga441b6efc161a4573d06465bd22d9dc2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga78f0838b0c4e3db28b26355624d4bd37"><td class="memItemLeft" align="right" valign="top">typedef struct psa_mac_operation_s&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a></td></tr>
+<tr class="separator:ga78f0838b0c4e3db28b26355624d4bd37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gace78d9b51394f9d4f77952963665897a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#gace78d9b51394f9d4f77952963665897a">psa_mac_compute</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *input, size_t input_length, uint8_t *mac, size_t mac_size, size_t *mac_length)</td></tr>
+<tr class="separator:gace78d9b51394f9d4f77952963665897a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga08e2e8c21bfe762a907266f3bdd1d07c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#ga08e2e8c21bfe762a907266f3bdd1d07c">psa_mac_verify</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *input, size_t input_length, const uint8_t *mac, const size_t mac_length)</td></tr>
+<tr class="separator:ga08e2e8c21bfe762a907266f3bdd1d07c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad33f2b15119593571ca6b8e7c757ab0e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#gad33f2b15119593571ca6b8e7c757ab0e">psa_mac_sign_setup</a> (<a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *operation, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg)</td></tr>
+<tr class="separator:gad33f2b15119593571ca6b8e7c757ab0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa721a59ae6d085ec90c7dc918879a027"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#gaa721a59ae6d085ec90c7dc918879a027">psa_mac_verify_setup</a> (<a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *operation, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg)</td></tr>
+<tr class="separator:gaa721a59ae6d085ec90c7dc918879a027"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5560af371497babefe03c9da4e8a1c05"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#ga5560af371497babefe03c9da4e8a1c05">psa_mac_update</a> (<a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *operation, const uint8_t *input, size_t input_length)</td></tr>
+<tr class="separator:ga5560af371497babefe03c9da4e8a1c05"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac22bc0125580c96724a09226cfbc97f2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#gac22bc0125580c96724a09226cfbc97f2">psa_mac_sign_finish</a> (<a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *operation, uint8_t *mac, size_t mac_size, size_t *mac_length)</td></tr>
+<tr class="separator:gac22bc0125580c96724a09226cfbc97f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac92b2930d6728e1be4d011c05d485822"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#gac92b2930d6728e1be4d011c05d485822">psa_mac_verify_finish</a> (<a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *operation, const uint8_t *mac, size_t mac_length)</td></tr>
+<tr class="separator:gac92b2930d6728e1be4d011c05d485822"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacd8dd54855ba1bc0a03f104f252884fd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__MAC.html#gacd8dd54855ba1bc0a03f104f252884fd">psa_mac_abort</a> (<a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *operation)</td></tr>
+<tr class="separator:gacd8dd54855ba1bc0a03f104f252884fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ga441b6efc161a4573d06465bd22d9dc2d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_MAC_OPERATION_INIT&#160;&#160;&#160;{0}</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>This macro returns a suitable initializer for a MAC operation object of type <a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a>. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ga78f0838b0c4e3db28b26355624d4bd37"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct psa_mac_operation_s <a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The type of the state data structure for multipart MAC operations.</p>
+<p>Before calling any function on a MAC operation object, the application must initialize it by any of the following means:</p><ul>
+<li>Set the structure to all-bits-zero, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_mac_operation_t operation;</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;memset(&amp;operation, 0, sizeof(operation));</div></div><!-- fragment --></li>
+<li>Initialize the structure to logical zero values, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_mac_operation_t operation = {0};</div></div><!-- fragment --></li>
+<li>Initialize the structure to the initializer <a class="el" href="group__MAC.html#ga441b6efc161a4573d06465bd22d9dc2d">PSA_MAC_OPERATION_INIT</a>, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_mac_operation_t operation = PSA_MAC_OPERATION_INIT;</div></div><!-- fragment --></li>
+<li>Assign the result of the function psa_mac_operation_init() to the structure, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_mac_operation_t operation;</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;operation = psa_mac_operation_init();</div></div><!-- fragment --></li>
+</ul>
+<p>This is an implementation-defined <code>struct</code>. Applications should not make any assumptions about the content of this structure except as directed by the documentation of a specific implementation. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gacd8dd54855ba1bc0a03f104f252884fd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_mac_abort </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Abort a MAC operation.</p>
+<p>Aborting an operation frees all associated resources except for the <code>operation</code> structure itself. Once aborted, the operation object can be reused for another operation by calling <a class="el" href="group__MAC.html#gad33f2b15119593571ca6b8e7c757ab0e">psa_mac_sign_setup()</a> or <a class="el" href="group__MAC.html#gaa721a59ae6d085ec90c7dc918879a027">psa_mac_verify_setup()</a> again.</p>
+<p>You may call this function any time after the operation object has been initialized by any of the following methods:</p><ul>
+<li>A call to <a class="el" href="group__MAC.html#gad33f2b15119593571ca6b8e7c757ab0e">psa_mac_sign_setup()</a> or <a class="el" href="group__MAC.html#gaa721a59ae6d085ec90c7dc918879a027">psa_mac_verify_setup()</a>, whether it succeeds or not.</li>
+<li>Initializing the <code>struct</code> to all-bits-zero.</li>
+<li>Initializing the <code>struct</code> to logical zeros, e.g. <code>psa_mac_operation_t operation = {0}</code>.</li>
+</ul>
+<p>In particular, calling <a class="el" href="group__MAC.html#gacd8dd54855ba1bc0a03f104f252884fd">psa_mac_abort()</a> after the operation has been terminated by a call to <a class="el" href="group__MAC.html#gacd8dd54855ba1bc0a03f104f252884fd">psa_mac_abort()</a>, <a class="el" href="group__MAC.html#gac22bc0125580c96724a09226cfbc97f2">psa_mac_sign_finish()</a> or <a class="el" href="group__MAC.html#gac92b2930d6728e1be4d011c05d485822">psa_mac_verify_finish()</a> is safe and has no effect.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Initialized MAC operation.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td><code>operation</code> is not an active MAC operation. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gace78d9b51394f9d4f77952963665897a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_mac_compute </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>input</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>input_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>mac</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>mac_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>mac_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Calculate the MAC (message authentication code) of a message.</p>
+<dl class="section note"><dt>Note</dt><dd>To verify the MAC of a message against an expected value, use <a class="el" href="group__MAC.html#ga08e2e8c21bfe762a907266f3bdd1d07c">psa_mac_verify()</a> instead. Beware that comparing integrity or authenticity data such as MAC values with a function such as <code>memcmp</code> is risky because the time taken by the comparison may leak information about the MAC value which could allow an attacker to guess a valid MAC and thereby bypass security controls.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to use for the operation. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>The MAC algorithm to compute (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gaca7aee4c9dde316b3b1a150a26eab776">PSA_ALG_IS_MAC(alg)</a> is true). </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">input</td><td>Buffer containing the input message. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">input_length</td><td>Size of the <code>input</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">mac</td><td>Buffer where the MAC value is to be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">mac_size</td><td>Size of the <code>mac</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">mac_length</td><td>On success, the number of bytes that make up the mac value. This is always <a class="el" href="crypto__sizes_8h.html#aef340331ce3cba2b57e1fc5624bf1f99">PSA_HASH_SIZE</a>(<code>alg</code>) where <code>alg</code> is the hash algorithm that is calculated.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>key</code> is not compatible with <code>alg</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not supported or is not a MAC algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gac22bc0125580c96724a09226cfbc97f2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_mac_sign_finish </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>mac</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>mac_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>mac_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Finish the calculation of the MAC of a message.</p>
+<p>The application must call <a class="el" href="group__MAC.html#gad33f2b15119593571ca6b8e7c757ab0e">psa_mac_sign_setup()</a> before calling this function. This function calculates the MAC of the message formed by concatenating the inputs passed to preceding calls to <a class="el" href="group__MAC.html#ga5560af371497babefe03c9da4e8a1c05">psa_mac_update()</a>.</p>
+<p>When this function returns, the operation becomes inactive.</p>
+<dl class="section warning"><dt>Warning</dt><dd>Applications should not call this function if they expect a specific value for the MAC. Call <a class="el" href="group__MAC.html#gac92b2930d6728e1be4d011c05d485822">psa_mac_verify_finish()</a> instead. Beware that comparing integrity or authenticity data such as MAC values with a function such as <code>memcmp</code> is risky because the time taken by the comparison may leak information about the MAC value which could allow an attacker to guess a valid MAC and thereby bypass security controls.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Active MAC operation. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">mac</td><td>Buffer where the MAC value is to be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">mac_size</td><td>Size of the <code>mac</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">mac_length</td><td>On success, the number of bytes that make up the MAC value. This is always <a class="el" href="crypto__sizes_8h.html#aa84c5fb384ac7cb1bfc52adde96588ee">PSA_MAC_FINAL_SIZE</a>(<code>key_type</code>, <code>key_bits</code>, <code>alg</code>) where <code>key_type</code> and <code>key_bits</code> are the type and bit-size respectively of the key and <code>alg</code> is the MAC algorithm that is calculated.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The operation state is not valid (not set up, or already completed). </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a></td><td>The size of the <code>mac</code> buffer is too small. You can determine a sufficient buffer size by calling <a class="el" href="crypto__sizes_8h.html#aa84c5fb384ac7cb1bfc52adde96588ee">PSA_MAC_FINAL_SIZE()</a>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gad33f2b15119593571ca6b8e7c757ab0e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_mac_sign_setup </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set up a multipart MAC calculation operation.</p>
+<p>This function sets up the calculation of the MAC (message authentication code) of a byte string. To verify the MAC of a message against an expected value, use <a class="el" href="group__MAC.html#gaa721a59ae6d085ec90c7dc918879a027">psa_mac_verify_setup()</a> instead.</p>
+<p>The sequence of operations to calculate a MAC is as follows:</p><ol type="1">
+<li>Allocate an operation object which will be passed to all the functions listed here.</li>
+<li>Initialize the operation object with one of the methods described in the documentation for <a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a>, e.g. PSA_MAC_OPERATION_INIT.</li>
+<li>Call <a class="el" href="group__MAC.html#gad33f2b15119593571ca6b8e7c757ab0e">psa_mac_sign_setup()</a> to specify the algorithm and key.</li>
+<li>Call <a class="el" href="group__MAC.html#ga5560af371497babefe03c9da4e8a1c05">psa_mac_update()</a> zero, one or more times, passing a fragment of the message each time. The MAC that is calculated is the MAC of the concatenation of these messages in order.</li>
+<li>At the end of the message, call <a class="el" href="group__MAC.html#gac22bc0125580c96724a09226cfbc97f2">psa_mac_sign_finish()</a> to finish calculating the MAC value and retrieve it.</li>
+</ol>
+<p>The application may call <a class="el" href="group__MAC.html#gacd8dd54855ba1bc0a03f104f252884fd">psa_mac_abort()</a> at any time after the operation has been initialized.</p>
+<p>After a successful call to <a class="el" href="group__MAC.html#gad33f2b15119593571ca6b8e7c757ab0e">psa_mac_sign_setup()</a>, the application must eventually terminate the operation through one of the following methods:</p><ul>
+<li>A failed call to <a class="el" href="group__MAC.html#ga5560af371497babefe03c9da4e8a1c05">psa_mac_update()</a>.</li>
+<li>A call to <a class="el" href="group__MAC.html#gac22bc0125580c96724a09226cfbc97f2">psa_mac_sign_finish()</a> or <a class="el" href="group__MAC.html#gacd8dd54855ba1bc0a03f104f252884fd">psa_mac_abort()</a>.</li>
+</ul>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>The operation object to set up. It must have been initialized as per the documentation for <a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> and not yet in use. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to use for the operation. It must remain valid until the operation terminates. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>The MAC algorithm to compute (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gaca7aee4c9dde316b3b1a150a26eab776">PSA_ALG_IS_MAC(alg)</a> is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>key</code> is not compatible with <code>alg</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not supported or is not a MAC algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5560af371497babefe03c9da4e8a1c05"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_mac_update </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>input</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>input_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Add a message fragment to a multipart MAC operation.</p>
+<p>The application must call <a class="el" href="group__MAC.html#gad33f2b15119593571ca6b8e7c757ab0e">psa_mac_sign_setup()</a> or <a class="el" href="group__MAC.html#gaa721a59ae6d085ec90c7dc918879a027">psa_mac_verify_setup()</a> before calling this function.</p>
+<p>If this function returns an error status, the operation becomes inactive.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Active MAC operation. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">input</td><td>Buffer containing the message fragment to add to the MAC calculation. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">input_length</td><td>Size of the <code>input</code> buffer in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The operation state is not valid (not set up, or already completed). </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga08e2e8c21bfe762a907266f3bdd1d07c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_mac_verify </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>input</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>input_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>mac</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const size_t&#160;</td>
+          <td class="paramname"><em>mac_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Calculate the MAC of a message and compare it with a reference value.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to use for the operation. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>The MAC algorithm to compute (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gaca7aee4c9dde316b3b1a150a26eab776">PSA_ALG_IS_MAC(alg)</a> is true). </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">input</td><td>Buffer containing the input message. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">input_length</td><td>Size of the <code>input</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">mac</td><td>Buffer containing the expected MAC value. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">mac_length</td><td>Size of the <code>mac</code> buffer in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>The expected MAC is identical to the actual MAC of the input. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga35927f755d232c4766de600f2c49e9f2">PSA_ERROR_INVALID_SIGNATURE</a></td><td>The MAC of the message was calculated successfully, but it differs from the expected value. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>key</code> is not compatible with <code>alg</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not supported or is not a MAC algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gac92b2930d6728e1be4d011c05d485822"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_mac_verify_finish </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>mac</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>mac_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Finish the calculation of the MAC of a message and compare it with an expected value.</p>
+<p>The application must call <a class="el" href="group__MAC.html#gaa721a59ae6d085ec90c7dc918879a027">psa_mac_verify_setup()</a> before calling this function. This function calculates the MAC of the message formed by concatenating the inputs passed to preceding calls to <a class="el" href="group__MAC.html#ga5560af371497babefe03c9da4e8a1c05">psa_mac_update()</a>. It then compares the calculated MAC with the expected MAC passed as a parameter to this function.</p>
+<p>When this function returns, the operation becomes inactive.</p>
+<dl class="section note"><dt>Note</dt><dd>Implementations shall make the best effort to ensure that the comparison between the actual MAC and the expected MAC is performed in constant time.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Active MAC operation. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">mac</td><td>Buffer containing the expected MAC value. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">mac_length</td><td>Size of the <code>mac</code> buffer in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>The expected MAC is identical to the actual MAC of the message. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga35927f755d232c4766de600f2c49e9f2">PSA_ERROR_INVALID_SIGNATURE</a></td><td>The MAC of the message was calculated successfully, but it differs from the expected MAC. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The operation state is not valid (not set up, or already completed). </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa721a59ae6d085ec90c7dc918879a027"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_mac_verify_setup </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set up a multipart MAC verification operation.</p>
+<p>This function sets up the verification of the MAC (message authentication code) of a byte string against an expected value.</p>
+<p>The sequence of operations to verify a MAC is as follows:</p><ol type="1">
+<li>Allocate an operation object which will be passed to all the functions listed here.</li>
+<li>Initialize the operation object with one of the methods described in the documentation for <a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a>, e.g. PSA_MAC_OPERATION_INIT.</li>
+<li>Call <a class="el" href="group__MAC.html#gaa721a59ae6d085ec90c7dc918879a027">psa_mac_verify_setup()</a> to specify the algorithm and key.</li>
+<li>Call <a class="el" href="group__MAC.html#ga5560af371497babefe03c9da4e8a1c05">psa_mac_update()</a> zero, one or more times, passing a fragment of the message each time. The MAC that is calculated is the MAC of the concatenation of these messages in order.</li>
+<li>At the end of the message, call <a class="el" href="group__MAC.html#gac92b2930d6728e1be4d011c05d485822">psa_mac_verify_finish()</a> to finish calculating the actual MAC of the message and verify it against the expected value.</li>
+</ol>
+<p>The application may call <a class="el" href="group__MAC.html#gacd8dd54855ba1bc0a03f104f252884fd">psa_mac_abort()</a> at any time after the operation has been initialized.</p>
+<p>After a successful call to <a class="el" href="group__MAC.html#gaa721a59ae6d085ec90c7dc918879a027">psa_mac_verify_setup()</a>, the application must eventually terminate the operation through one of the following methods:</p><ul>
+<li>A failed call to <a class="el" href="group__MAC.html#ga5560af371497babefe03c9da4e8a1c05">psa_mac_update()</a>.</li>
+<li>A call to <a class="el" href="group__MAC.html#gac92b2930d6728e1be4d011c05d485822">psa_mac_verify_finish()</a> or <a class="el" href="group__MAC.html#gacd8dd54855ba1bc0a03f104f252884fd">psa_mac_abort()</a>.</li>
+</ul>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>The operation object to set up. It must have been initialized as per the documentation for <a class="el" href="group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37">psa_mac_operation_t</a> and not yet in use. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to use for the operation. It must remain valid until the operation terminates. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>The MAC algorithm to compute (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gaca7aee4c9dde316b3b1a150a26eab776">PSA_ALG_IS_MAC</a>(<code>alg</code>) is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>key</code> is not compatible with <code>alg</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not supported or is not a MAC algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/group__aead.html b/docs/html/group__aead.html
new file mode 100644
index 0000000..5e3af48
--- /dev/null
+++ b/docs/html/group__aead.html
@@ -0,0 +1,1057 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Authenticated encryption with associated data (AEAD)</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Authenticated encryption with associated data (AEAD)</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:gaf52e036794c0dc6fbadd93a2b990f366"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#gaf52e036794c0dc6fbadd93a2b990f366">PSA_AEAD_OPERATION_INIT</a>&#160;&#160;&#160;{0}</td></tr>
+<tr class="separator:gaf52e036794c0dc6fbadd93a2b990f366"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga14f6a01afbaa8c5b3d8c5d345cbaa3ed"><td class="memItemLeft" align="right" valign="top">typedef struct psa_aead_operation_s&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a></td></tr>
+<tr class="separator:ga14f6a01afbaa8c5b3d8c5d345cbaa3ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga44de092cf58bb6c820c5c80a6c51610d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#ga44de092cf58bb6c820c5c80a6c51610d">psa_aead_encrypt</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *nonce, size_t nonce_length, const uint8_t *additional_data, size_t additional_data_length, const uint8_t *plaintext, size_t plaintext_length, uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length)</td></tr>
+<tr class="separator:ga44de092cf58bb6c820c5c80a6c51610d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa8ce6527f2e227f1071fadbf2099793b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#gaa8ce6527f2e227f1071fadbf2099793b">psa_aead_decrypt</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *nonce, size_t nonce_length, const uint8_t *additional_data, size_t additional_data_length, const uint8_t *ciphertext, size_t ciphertext_length, uint8_t *plaintext, size_t plaintext_size, size_t *plaintext_length)</td></tr>
+<tr class="separator:gaa8ce6527f2e227f1071fadbf2099793b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga47265dc4852f1476f852752218fd12b2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#ga47265dc4852f1476f852752218fd12b2">psa_aead_encrypt_setup</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg)</td></tr>
+<tr class="separator:ga47265dc4852f1476f852752218fd12b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga439896519d4a367ec86b47f201884152"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#ga439896519d4a367ec86b47f201884152">psa_aead_decrypt_setup</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg)</td></tr>
+<tr class="separator:ga439896519d4a367ec86b47f201884152"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3eadcf2a29f662129ea4fb3454969ba2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#ga3eadcf2a29f662129ea4fb3454969ba2">psa_aead_generate_nonce</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation, unsigned char *nonce, size_t nonce_size, size_t *nonce_length)</td></tr>
+<tr class="separator:ga3eadcf2a29f662129ea4fb3454969ba2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga40641d0721ca7fe01bbcd9ef635fbc46"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#ga40641d0721ca7fe01bbcd9ef635fbc46">psa_aead_set_nonce</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation, const unsigned char *nonce, size_t nonce_length)</td></tr>
+<tr class="separator:ga40641d0721ca7fe01bbcd9ef635fbc46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad3431e28d05002c2a7b0760610176050"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#gad3431e28d05002c2a7b0760610176050">psa_aead_set_lengths</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation, size_t ad_length, size_t plaintext_length)</td></tr>
+<tr class="separator:gad3431e28d05002c2a7b0760610176050"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6d0eed03f832e5c9c91cb8adf2882569"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569">psa_aead_update_ad</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation, const uint8_t *input, size_t input_length)</td></tr>
+<tr class="separator:ga6d0eed03f832e5c9c91cb8adf2882569"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3b105de2088cef7c3d9e2fd8048c841c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">psa_aead_update</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation, const uint8_t *input, size_t input_length, unsigned char *output, size_t output_size, size_t *output_length)</td></tr>
+<tr class="separator:ga3b105de2088cef7c3d9e2fd8048c841c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga759791bbe1763b377c3b5447641f1fc8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#ga759791bbe1763b377c3b5447641f1fc8">psa_aead_finish</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation, uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length, uint8_t *tag, size_t tag_size, size_t *tag_length)</td></tr>
+<tr class="separator:ga759791bbe1763b377c3b5447641f1fc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaaed211fc61977c859d6ff07f39f59219"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#gaaed211fc61977c859d6ff07f39f59219">psa_aead_verify</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation, const uint8_t *tag, size_t tag_length)</td></tr>
+<tr class="separator:gaaed211fc61977c859d6ff07f39f59219"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae8a5f93d92318c8f592ee9fbb9d36ba0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__aead.html#gae8a5f93d92318c8f592ee9fbb9d36ba0">psa_aead_abort</a> (<a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *operation)</td></tr>
+<tr class="separator:gae8a5f93d92318c8f592ee9fbb9d36ba0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="gaf52e036794c0dc6fbadd93a2b990f366"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_AEAD_OPERATION_INIT&#160;&#160;&#160;{0}</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>This macro returns a suitable initializer for an AEAD operation object of type <a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a>. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ga14f6a01afbaa8c5b3d8c5d345cbaa3ed"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct psa_aead_operation_s <a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The type of the state data structure for multipart AEAD operations.</p>
+<p>Before calling any function on an AEAD operation object, the application must initialize it by any of the following means:</p><ul>
+<li>Set the structure to all-bits-zero, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_aead_operation_t operation;</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;memset(&amp;operation, 0, sizeof(operation));</div></div><!-- fragment --></li>
+<li>Initialize the structure to logical zero values, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_aead_operation_t operation = {0};</div></div><!-- fragment --></li>
+<li>Initialize the structure to the initializer <a class="el" href="group__aead.html#gaf52e036794c0dc6fbadd93a2b990f366">PSA_AEAD_OPERATION_INIT</a>, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_aead_operation_t operation = PSA_AEAD_OPERATION_INIT;</div></div><!-- fragment --></li>
+<li>Assign the result of the function psa_aead_operation_init() to the structure, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_aead_operation_t operation;</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;operation = psa_aead_operation_init();</div></div><!-- fragment --></li>
+</ul>
+<p>This is an implementation-defined <code>struct</code>. Applications should not make any assumptions about the content of this structure except as directed by the documentation of a specific implementation. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gae8a5f93d92318c8f592ee9fbb9d36ba0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_aead_abort </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Abort an AEAD operation.</p>
+<p>Aborting an operation frees all associated resources except for the <code>operation</code> structure itself. Once aborted, the operation object can be reused for another operation by calling <a class="el" href="group__aead.html#ga47265dc4852f1476f852752218fd12b2">psa_aead_encrypt_setup()</a> or <a class="el" href="group__aead.html#ga439896519d4a367ec86b47f201884152">psa_aead_decrypt_setup()</a> again.</p>
+<p>You may call this function any time after the operation object has been initialized by any of the following methods:</p><ul>
+<li>A call to <a class="el" href="group__aead.html#ga47265dc4852f1476f852752218fd12b2">psa_aead_encrypt_setup()</a> or <a class="el" href="group__aead.html#ga439896519d4a367ec86b47f201884152">psa_aead_decrypt_setup()</a>, whether it succeeds or not.</li>
+<li>Initializing the <code>struct</code> to all-bits-zero.</li>
+<li>Initializing the <code>struct</code> to logical zeros, e.g. <code>psa_aead_operation_t operation = {0}</code>.</li>
+</ul>
+<p>In particular, calling <a class="el" href="group__aead.html#gae8a5f93d92318c8f592ee9fbb9d36ba0">psa_aead_abort()</a> after the operation has been terminated by a call to <a class="el" href="group__aead.html#gae8a5f93d92318c8f592ee9fbb9d36ba0">psa_aead_abort()</a> or <a class="el" href="group__aead.html#ga759791bbe1763b377c3b5447641f1fc8">psa_aead_finish()</a> is safe and has no effect.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Initialized AEAD operation.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td><code>operation</code> is not an active AEAD operation. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa8ce6527f2e227f1071fadbf2099793b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_aead_decrypt </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>nonce</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>nonce_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>additional_data</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>additional_data_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>ciphertext</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>ciphertext_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>plaintext</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>plaintext_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>plaintext_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Process an authenticated decryption operation.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to use for the operation. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>The AEAD algorithm to compute (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">PSA_ALG_IS_AEAD</a>(<code>alg</code>) is true). </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">nonce</td><td>Nonce or IV to use. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">nonce_length</td><td>Size of the <code>nonce</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">additional_data</td><td>Additional data that has been authenticated but not encrypted. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">additional_data_length</td><td>Size of <code>additional_data</code> in bytes. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">ciphertext</td><td>Data that has been authenticated and encrypted. For algorithms where the encrypted data and the authentication tag are defined as separate inputs, the buffer must contain the encrypted data followed by the authentication tag. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">ciphertext_length</td><td>Size of <code>ciphertext</code> in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">plaintext</td><td>Output buffer for the decrypted data. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">plaintext_size</td><td>Size of the <code>plaintext</code> buffer in bytes. This must be at least <a class="el" href="crypto__sizes_8h.html#a1d057796166c16eb673ad1997e48a60b">PSA_AEAD_DECRYPT_OUTPUT_SIZE</a>(<code>alg</code>, <code>ciphertext_length</code>). </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">plaintext_length</td><td>On success, the size of the output in the <b>plaintext</b> buffer.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga35927f755d232c4766de600f2c49e9f2">PSA_ERROR_INVALID_SIGNATURE</a></td><td>The ciphertext is not authentic. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>key</code> is not compatible with <code>alg</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not supported or is not an AEAD algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga439896519d4a367ec86b47f201884152"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_aead_decrypt_setup </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set the key for a multipart authenticated decryption operation.</p>
+<p>The sequence of operations to decrypt a message with authentication is as follows:</p><ol type="1">
+<li>Allocate an operation object which will be passed to all the functions listed here.</li>
+<li>Initialize the operation object with one of the methods described in the documentation for <a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a>, e.g. PSA_AEAD_OPERATION_INIT.</li>
+<li>Call <a class="el" href="group__aead.html#ga439896519d4a367ec86b47f201884152">psa_aead_decrypt_setup()</a> to specify the algorithm and key.</li>
+<li>If needed, call <a class="el" href="group__aead.html#gad3431e28d05002c2a7b0760610176050">psa_aead_set_lengths()</a> to specify the length of the inputs to the subsequent calls to <a class="el" href="group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569">psa_aead_update_ad()</a> and <a class="el" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">psa_aead_update()</a>. See the documentation of <a class="el" href="group__aead.html#gad3431e28d05002c2a7b0760610176050">psa_aead_set_lengths()</a> for details.</li>
+<li>Call <a class="el" href="group__aead.html#ga40641d0721ca7fe01bbcd9ef635fbc46">psa_aead_set_nonce()</a> with the nonce for the decryption.</li>
+<li>Call <a class="el" href="group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569">psa_aead_update_ad()</a> zero, one or more times, passing a fragment of the non-encrypted additional authenticated data each time.</li>
+<li>Call <a class="el" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">psa_aead_update()</a> zero, one or more times, passing a fragment of the ciphertext to decrypt each time.</li>
+<li>Call <a class="el" href="group__aead.html#gaaed211fc61977c859d6ff07f39f59219">psa_aead_verify()</a>.</li>
+</ol>
+<p>The application may call <a class="el" href="group__aead.html#gae8a5f93d92318c8f592ee9fbb9d36ba0">psa_aead_abort()</a> at any time after the operation has been initialized.</p>
+<p>After a successful call to <a class="el" href="group__aead.html#ga439896519d4a367ec86b47f201884152">psa_aead_decrypt_setup()</a>, the application must eventually terminate the operation. The following events terminate an operation:</p><ul>
+<li>A failed call to any of the <code>psa_aead_xxx</code> functions.</li>
+<li>A call to <a class="el" href="group__aead.html#ga759791bbe1763b377c3b5447641f1fc8">psa_aead_finish()</a>, <a class="el" href="group__aead.html#gaaed211fc61977c859d6ff07f39f59219">psa_aead_verify()</a> or <a class="el" href="group__aead.html#gae8a5f93d92318c8f592ee9fbb9d36ba0">psa_aead_abort()</a>.</li>
+</ul>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>The operation object to set up. It must have been initialized as per the documentation for <a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> and not yet in use. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to use for the operation. It must remain valid until the operation terminates. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>The AEAD algorithm to compute (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">PSA_ALG_IS_AEAD</a>(<code>alg</code>) is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>key</code> is not compatible with <code>alg</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not supported or is not an AEAD algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga44de092cf58bb6c820c5c80a6c51610d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_aead_encrypt </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>nonce</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>nonce_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>additional_data</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>additional_data_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>plaintext</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>plaintext_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>ciphertext</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>ciphertext_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>ciphertext_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Process an authenticated encryption operation.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to use for the operation. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>The AEAD algorithm to compute (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">PSA_ALG_IS_AEAD</a>(<code>alg</code>) is true). </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">nonce</td><td>Nonce or IV to use. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">nonce_length</td><td>Size of the <code>nonce</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">additional_data</td><td>Additional data that will be authenticated but not encrypted. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">additional_data_length</td><td>Size of <code>additional_data</code> in bytes. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">plaintext</td><td>Data that will be authenticated and encrypted. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">plaintext_length</td><td>Size of <code>plaintext</code> in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">ciphertext</td><td>Output buffer for the authenticated and encrypted data. The additional data is not part of this output. For algorithms where the encrypted data and the authentication tag are defined as separate outputs, the authentication tag is appended to the encrypted data. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">ciphertext_size</td><td>Size of the <code>ciphertext</code> buffer in bytes. This must be at least <a class="el" href="crypto__sizes_8h.html#a85667d47a7aa6c7b99a80e5273671266">PSA_AEAD_ENCRYPT_OUTPUT_SIZE</a>(<code>alg</code>, <code>plaintext_length</code>). </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">ciphertext_length</td><td>On success, the size of the output in the <b>ciphertext</b> buffer.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>key</code> is not compatible with <code>alg</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not supported or is not an AEAD algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga47265dc4852f1476f852752218fd12b2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_aead_encrypt_setup </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set the key for a multipart authenticated encryption operation.</p>
+<p>The sequence of operations to encrypt a message with authentication is as follows:</p><ol type="1">
+<li>Allocate an operation object which will be passed to all the functions listed here.</li>
+<li>Initialize the operation object with one of the methods described in the documentation for <a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a>, e.g. PSA_AEAD_OPERATION_INIT.</li>
+<li>Call <a class="el" href="group__aead.html#ga47265dc4852f1476f852752218fd12b2">psa_aead_encrypt_setup()</a> to specify the algorithm and key.</li>
+<li>If needed, call <a class="el" href="group__aead.html#gad3431e28d05002c2a7b0760610176050">psa_aead_set_lengths()</a> to specify the length of the inputs to the subsequent calls to <a class="el" href="group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569">psa_aead_update_ad()</a> and <a class="el" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">psa_aead_update()</a>. See the documentation of <a class="el" href="group__aead.html#gad3431e28d05002c2a7b0760610176050">psa_aead_set_lengths()</a> for details.</li>
+<li>Call either <a class="el" href="group__aead.html#ga3eadcf2a29f662129ea4fb3454969ba2">psa_aead_generate_nonce()</a> or <a class="el" href="group__aead.html#ga40641d0721ca7fe01bbcd9ef635fbc46">psa_aead_set_nonce()</a> to generate or set the nonce. You should use <a class="el" href="group__aead.html#ga3eadcf2a29f662129ea4fb3454969ba2">psa_aead_generate_nonce()</a> unless the protocol you are implementing requires a specific nonce value.</li>
+<li>Call <a class="el" href="group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569">psa_aead_update_ad()</a> zero, one or more times, passing a fragment of the non-encrypted additional authenticated data each time.</li>
+<li>Call <a class="el" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">psa_aead_update()</a> zero, one or more times, passing a fragment of the message to encrypt each time.</li>
+<li>Call <a class="el" href="group__aead.html#ga759791bbe1763b377c3b5447641f1fc8">psa_aead_finish()</a>.</li>
+</ol>
+<p>The application may call <a class="el" href="group__aead.html#gae8a5f93d92318c8f592ee9fbb9d36ba0">psa_aead_abort()</a> at any time after the operation has been initialized.</p>
+<p>After a successful call to <a class="el" href="group__aead.html#ga47265dc4852f1476f852752218fd12b2">psa_aead_encrypt_setup()</a>, the application must eventually terminate the operation. The following events terminate an operation:</p><ul>
+<li>A failed call to any of the <code>psa_aead_xxx</code> functions.</li>
+<li>A call to <a class="el" href="group__aead.html#ga759791bbe1763b377c3b5447641f1fc8">psa_aead_finish()</a>, <a class="el" href="group__aead.html#gaaed211fc61977c859d6ff07f39f59219">psa_aead_verify()</a> or <a class="el" href="group__aead.html#gae8a5f93d92318c8f592ee9fbb9d36ba0">psa_aead_abort()</a>.</li>
+</ul>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>The operation object to set up. It must have been initialized as per the documentation for <a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> and not yet in use. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to use for the operation. It must remain valid until the operation terminates. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>The AEAD algorithm to compute (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">PSA_ALG_IS_AEAD</a>(<code>alg</code>) is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>key</code> is not compatible with <code>alg</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not supported or is not an AEAD algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga759791bbe1763b377c3b5447641f1fc8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_aead_finish </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>ciphertext</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>ciphertext_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>ciphertext_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>tag</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>tag_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>tag_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Finish encrypting a message in an AEAD operation.</p>
+<p>The operation must have been set up with <a class="el" href="group__aead.html#ga47265dc4852f1476f852752218fd12b2">psa_aead_encrypt_setup()</a>.</p>
+<p>This function finishes the authentication of the additional data formed by concatenating the inputs passed to preceding calls to <a class="el" href="group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569">psa_aead_update_ad()</a> with the plaintext formed by concatenating the inputs passed to preceding calls to <a class="el" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">psa_aead_update()</a>.</p>
+<p>This function has two output buffers:</p><ul>
+<li><code>ciphertext</code> contains trailing ciphertext that was buffered from preceding calls to <a class="el" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">psa_aead_update()</a>. For all standard AEAD algorithms, <a class="el" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">psa_aead_update()</a> does not buffer any output and therefore <code>ciphertext</code> will not contain any output and can be a 0-sized buffer.</li>
+<li><code>tag</code> contains the authentication tag. Its length is always <a class="el" href="crypto__sizes_8h.html#a8e3079b2e624cb8d32b94843cddada49">PSA_AEAD_TAG_LENGTH</a>(<code>alg</code>) where <code>alg</code> is the AEAD algorithm that the operation performs.</li>
+</ul>
+<p>When this function returns, the operation becomes inactive.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Active AEAD operation. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">ciphertext</td><td>Buffer where the last part of the ciphertext is to be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">ciphertext_size</td><td>Size of the <code>ciphertext</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">ciphertext_length</td><td>On success, the number of bytes of returned ciphertext. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">tag</td><td>Buffer where the authentication tag is to be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">tag_size</td><td>Size of the <code>tag</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">tag_length</td><td>On success, the number of bytes that make up the returned tag.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The operation state is not valid (not set up, nonce not set, decryption, or already completed). </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a></td><td>The size of the <code>output</code> buffer is too small. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td>The total length of input to <a class="el" href="group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569">psa_aead_update_ad()</a> so far is less than the additional data length that was previously specified with <a class="el" href="group__aead.html#gad3431e28d05002c2a7b0760610176050">psa_aead_set_lengths()</a>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td>The total length of input to <a class="el" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">psa_aead_update()</a> so far is less than the plaintext length that was previously specified with <a class="el" href="group__aead.html#gad3431e28d05002c2a7b0760610176050">psa_aead_set_lengths()</a>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3eadcf2a29f662129ea4fb3454969ba2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_aead_generate_nonce </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned char *&#160;</td>
+          <td class="paramname"><em>nonce</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>nonce_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>nonce_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generate a random nonce for an authenticated encryption operation.</p>
+<p>This function generates a random nonce for the authenticated encryption operation with an appropriate size for the chosen algorithm, key type and key size.</p>
+<p>The application must call <a class="el" href="group__aead.html#ga47265dc4852f1476f852752218fd12b2">psa_aead_encrypt_setup()</a> before calling this function.</p>
+<p>If this function returns an error status, the operation becomes inactive.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Active AEAD operation. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">nonce</td><td>Buffer where the generated nonce is to be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">nonce_size</td><td>Size of the <code>nonce</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">nonce_length</td><td>On success, the number of bytes of the generated nonce.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The operation state is not valid (not set up, or nonce already set). </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a></td><td>The size of the <code>nonce</code> buffer is too small. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gad3431e28d05002c2a7b0760610176050"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_aead_set_lengths </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>ad_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>plaintext_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Declare the lengths of the message and additional data for AEAD.</p>
+<p>The application must call this function before calling <a class="el" href="group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569">psa_aead_update_ad()</a> or <a class="el" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">psa_aead_update()</a> if the algorithm for the operation requires it. If the algorithm does not require it, calling this function is optional, but if this function is called then the implementation must enforce the lengths.</p>
+<p>You may call this function before or after setting the nonce with <a class="el" href="group__aead.html#ga40641d0721ca7fe01bbcd9ef635fbc46">psa_aead_set_nonce()</a> or <a class="el" href="group__aead.html#ga3eadcf2a29f662129ea4fb3454969ba2">psa_aead_generate_nonce()</a>.</p>
+<ul>
+<li>For #PSA_ALG_CCM, calling this function is required.</li>
+<li>For the other AEAD algorithms defined in this specification, calling this function is not required.</li>
+<li>For vendor-defined algorithm, refer to the vendor documentation.</li>
+</ul>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Active AEAD operation. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">ad_length</td><td>Size of the non-encrypted additional authenticated data in bytes. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">plaintext_length</td><td>Size of the plaintext to encrypt in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The operation state is not valid (not set up, already completed, or <a class="el" href="group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569">psa_aead_update_ad()</a> or <a class="el" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">psa_aead_update()</a> already called). </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td>At least one of the lengths is not acceptable for the chosen algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga40641d0721ca7fe01bbcd9ef635fbc46"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_aead_set_nonce </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const unsigned char *&#160;</td>
+          <td class="paramname"><em>nonce</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>nonce_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set the nonce for an authenticated encryption or decryption operation.</p>
+<p>This function sets the nonce for the authenticated encryption or decryption operation.</p>
+<p>The application must call <a class="el" href="group__aead.html#ga47265dc4852f1476f852752218fd12b2">psa_aead_encrypt_setup()</a> before calling this function.</p>
+<p>If this function returns an error status, the operation becomes inactive.</p>
+<dl class="section note"><dt>Note</dt><dd>When encrypting, applications should use <a class="el" href="group__aead.html#ga3eadcf2a29f662129ea4fb3454969ba2">psa_aead_generate_nonce()</a> instead of this function, unless implementing a protocol that requires a non-random IV.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Active AEAD operation. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">nonce</td><td>Buffer containing the nonce to use. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">nonce_length</td><td>Size of the nonce in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The operation state is not valid (not set up, or nonce already set). </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td>The size of <code>nonce</code> is not acceptable for the chosen algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3b105de2088cef7c3d9e2fd8048c841c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_aead_update </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>input</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>input_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned char *&#160;</td>
+          <td class="paramname"><em>output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>output_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>output_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Encrypt or decrypt a message fragment in an active AEAD operation.</p>
+<p>Before calling this function, you must:</p><ol type="1">
+<li>Call either <a class="el" href="group__aead.html#ga47265dc4852f1476f852752218fd12b2">psa_aead_encrypt_setup()</a> or <a class="el" href="group__aead.html#ga439896519d4a367ec86b47f201884152">psa_aead_decrypt_setup()</a>. The choice of setup function determines whether this function encrypts or decrypts its input.</li>
+<li>Set the nonce with <a class="el" href="group__aead.html#ga3eadcf2a29f662129ea4fb3454969ba2">psa_aead_generate_nonce()</a> or <a class="el" href="group__aead.html#ga40641d0721ca7fe01bbcd9ef635fbc46">psa_aead_set_nonce()</a>.</li>
+<li>Call <a class="el" href="group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569">psa_aead_update_ad()</a> to pass all the additional data.</li>
+</ol>
+<p>If this function returns an error status, the operation becomes inactive.</p>
+<dl class="section warning"><dt>Warning</dt><dd>When decrypting, until <a class="el" href="group__aead.html#gaaed211fc61977c859d6ff07f39f59219">psa_aead_verify()</a> has returned <a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a>, there is no guarantee that the input is valid. Therefore, until you have called <a class="el" href="group__aead.html#gaaed211fc61977c859d6ff07f39f59219">psa_aead_verify()</a> and it has returned <a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a>:<ul>
+<li>Do not use the output in any way other than storing it in a confidential location. If you take any action that depends on the tentative decrypted data, this action will need to be undone if the input turns out not to be valid. Furthermore, if an adversary can observe that this action took place (for example through timing), they may be able to use this fact as an oracle to decrypt any message encrypted with the same key.</li>
+<li>In particular, do not copy the output anywhere but to a memory or storage space that you have exclusive access to.</li>
+</ul>
+</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Active AEAD operation. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">input</td><td>Buffer containing the message fragment to encrypt or decrypt. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">input_length</td><td>Size of the <code>input</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Buffer where the output is to be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">output_size</td><td>Size of the <code>output</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">output_length</td><td>On success, the number of bytes that make up the returned output.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The operation state is not valid (not set up, nonce not set or already completed). </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a></td><td>The size of the <code>output</code> buffer is too small. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td>The total length of input to <a class="el" href="group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569">psa_aead_update_ad()</a> so far is less than the additional data length that was previously specified with <a class="el" href="group__aead.html#gad3431e28d05002c2a7b0760610176050">psa_aead_set_lengths()</a>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td>The total input length overflows the plaintext length that was previously specified with <a class="el" href="group__aead.html#gad3431e28d05002c2a7b0760610176050">psa_aead_set_lengths()</a>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6d0eed03f832e5c9c91cb8adf2882569"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_aead_update_ad </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>input</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>input_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Pass additional data to an active AEAD operation.</p>
+<p>Additional data is authenticated, but not encrypted.</p>
+<p>You may call this function multiple times to pass successive fragments of the additional data. You may not call this function after passing data to encrypt or decrypt with <a class="el" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">psa_aead_update()</a>.</p>
+<p>Before calling this function, you must:</p><ol type="1">
+<li>Call either <a class="el" href="group__aead.html#ga47265dc4852f1476f852752218fd12b2">psa_aead_encrypt_setup()</a> or <a class="el" href="group__aead.html#ga439896519d4a367ec86b47f201884152">psa_aead_decrypt_setup()</a>.</li>
+<li>Set the nonce with <a class="el" href="group__aead.html#ga3eadcf2a29f662129ea4fb3454969ba2">psa_aead_generate_nonce()</a> or <a class="el" href="group__aead.html#ga40641d0721ca7fe01bbcd9ef635fbc46">psa_aead_set_nonce()</a>.</li>
+</ol>
+<p>If this function returns an error status, the operation becomes inactive.</p>
+<dl class="section warning"><dt>Warning</dt><dd>When decrypting, until <a class="el" href="group__aead.html#gaaed211fc61977c859d6ff07f39f59219">psa_aead_verify()</a> has returned <a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a>, there is no guarantee that the input is valid. Therefore, until you have called <a class="el" href="group__aead.html#gaaed211fc61977c859d6ff07f39f59219">psa_aead_verify()</a> and it has returned <a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a>, treat the input as untrusted and prepare to undo any action that depends on the input if <a class="el" href="group__aead.html#gaaed211fc61977c859d6ff07f39f59219">psa_aead_verify()</a> returns an error status.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Active AEAD operation. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">input</td><td>Buffer containing the fragment of additional data. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">input_length</td><td>Size of the <code>input</code> buffer in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The operation state is not valid (not set up, nonce not set, <a class="el" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">psa_aead_update()</a> already called, or operation already completed). </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td>The total input length overflows the additional data length that was previously specified with <a class="el" href="group__aead.html#gad3431e28d05002c2a7b0760610176050">psa_aead_set_lengths()</a>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gaaed211fc61977c859d6ff07f39f59219"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_aead_verify </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed">psa_aead_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>tag</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>tag_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Finish authenticating and decrypting a message in an AEAD operation.</p>
+<p>The operation must have been set up with <a class="el" href="group__aead.html#ga439896519d4a367ec86b47f201884152">psa_aead_decrypt_setup()</a>.</p>
+<p>This function finishes the authentication of the additional data formed by concatenating the inputs passed to preceding calls to <a class="el" href="group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569">psa_aead_update_ad()</a> with the ciphertext formed by concatenating the inputs passed to preceding calls to <a class="el" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">psa_aead_update()</a>.</p>
+<p>When this function returns, the operation becomes inactive.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Active AEAD operation. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">tag</td><td>Buffer containing the authentication tag. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">tag_length</td><td>Size of the <code>tag</code> buffer in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The operation state is not valid (not set up, nonce not set, encryption, or already completed). </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a></td><td>The size of the <code>output</code> buffer is too small. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td>The total length of input to <a class="el" href="group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569">psa_aead_update_ad()</a> so far is less than the additional data length that was previously specified with <a class="el" href="group__aead.html#gad3431e28d05002c2a7b0760610176050">psa_aead_set_lengths()</a>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td>The total length of input to <a class="el" href="group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c">psa_aead_update()</a> so far is less than the plaintext length that was previously specified with <a class="el" href="group__aead.html#gad3431e28d05002c2a7b0760610176050">psa_aead_set_lengths()</a>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/group__asymmetric.html b/docs/html/group__asymmetric.html
new file mode 100644
index 0000000..623eca0
--- /dev/null
+++ b/docs/html/group__asymmetric.html
@@ -0,0 +1,490 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Asymmetric cryptography</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Asymmetric cryptography</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga1b0db9d345b5048cdd39357ac2d56c07"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__asymmetric.html#ga1b0db9d345b5048cdd39357ac2d56c07">psa_asymmetric_sign</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *hash, size_t hash_length, uint8_t *signature, size_t signature_size, size_t *signature_length)</td></tr>
+<tr class="memdesc:ga1b0db9d345b5048cdd39357ac2d56c07"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sign a hash or short message with a private key.  <a href="#ga1b0db9d345b5048cdd39357ac2d56c07">More...</a><br /></td></tr>
+<tr class="separator:ga1b0db9d345b5048cdd39357ac2d56c07"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1b8e964c8d927e3d632325d762959eb7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__asymmetric.html#ga1b8e964c8d927e3d632325d762959eb7">psa_asymmetric_verify</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *hash, size_t hash_length, const uint8_t *signature, size_t signature_length)</td></tr>
+<tr class="memdesc:ga1b8e964c8d927e3d632325d762959eb7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verify the signature a hash or short message using a public key.  <a href="#ga1b8e964c8d927e3d632325d762959eb7">More...</a><br /></td></tr>
+<tr class="separator:ga1b8e964c8d927e3d632325d762959eb7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad429293b7b0bf2a830b9540a02552004"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__asymmetric.html#gad429293b7b0bf2a830b9540a02552004">psa_asymmetric_encrypt</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *input, size_t input_length, const uint8_t *salt, size_t salt_length, uint8_t *output, size_t output_size, size_t *output_length)</td></tr>
+<tr class="memdesc:gad429293b7b0bf2a830b9540a02552004"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encrypt a short message with a public key.  <a href="#gad429293b7b0bf2a830b9540a02552004">More...</a><br /></td></tr>
+<tr class="separator:gad429293b7b0bf2a830b9540a02552004"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga34b55fbaee23dba1a677186fc66a556e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__asymmetric.html#ga34b55fbaee23dba1a677186fc66a556e">psa_asymmetric_decrypt</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *input, size_t input_length, const uint8_t *salt, size_t salt_length, uint8_t *output, size_t output_size, size_t *output_length)</td></tr>
+<tr class="memdesc:ga34b55fbaee23dba1a677186fc66a556e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Decrypt a short message with a private key.  <a href="#ga34b55fbaee23dba1a677186fc66a556e">More...</a><br /></td></tr>
+<tr class="separator:ga34b55fbaee23dba1a677186fc66a556e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga34b55fbaee23dba1a677186fc66a556e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_asymmetric_decrypt </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>input</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>input_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>salt</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>salt_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>output_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>output_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Decrypt a short message with a private key. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to use for the operation. It must be an asymmetric key pair. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>An asymmetric encryption algorithm that is compatible with the type of <code>key</code>. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">input</td><td>The message to decrypt. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">input_length</td><td>Size of the <code>input</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">salt</td><td>A salt or label, if supported by the encryption algorithm. If the algorithm does not support a salt, pass <code>NULL</code>. If the algorithm supports an optional salt and you do not want to pass a salt, pass <code>NULL</code>.</td></tr>
+  </table>
+  </dd>
+</dl>
+<ul>
+<li>For <a class="el" href="group__crypto__types.html#ga4c540d3abe43fb9abcb94f2bc51acef9">PSA_ALG_RSA_PKCS1V15_CRYPT</a>, no salt is supported. <dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">salt_length</td><td>Size of the <code>salt</code> buffer in bytes. If <code>salt</code> is <code>NULL</code>, pass 0. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Buffer where the decrypted message is to be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">output_size</td><td>Size of the <code>output</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">output_length</td><td>On success, the number of bytes that make up the returned output.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a></td><td>The size of the <code>output</code> buffer is too small. You can determine a sufficient buffer size by calling <a class="el" href="crypto__sizes_8h.html#a61a246f3eac41989821d982e56fea6c1">PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE</a>(<code>key_type</code>, <code>key_bits</code>, <code>alg</code>) where <code>key_type</code> and <code>key_bits</code> are the type and bit-size respectively of <code>key</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4deb59fec02297ec5d8b42178323f675">PSA_ERROR_INSUFFICIENT_ENTROPY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gabe29594edbfb152cf153975b0597ac48">PSA_ERROR_INVALID_PADDING</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+</li>
+</ul>
+
+</div>
+</div>
+<a class="anchor" id="gad429293b7b0bf2a830b9540a02552004"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_asymmetric_encrypt </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>input</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>input_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>salt</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>salt_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>output_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>output_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Encrypt a short message with a public key. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to use for the operation. It must be a public key or an asymmetric key pair. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>An asymmetric encryption algorithm that is compatible with the type of <code>key</code>. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">input</td><td>The message to encrypt. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">input_length</td><td>Size of the <code>input</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">salt</td><td>A salt or label, if supported by the encryption algorithm. If the algorithm does not support a salt, pass <code>NULL</code>. If the algorithm supports an optional salt and you do not want to pass a salt, pass <code>NULL</code>.</td></tr>
+  </table>
+  </dd>
+</dl>
+<ul>
+<li>For <a class="el" href="group__crypto__types.html#ga4c540d3abe43fb9abcb94f2bc51acef9">PSA_ALG_RSA_PKCS1V15_CRYPT</a>, no salt is supported. <dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">salt_length</td><td>Size of the <code>salt</code> buffer in bytes. If <code>salt</code> is <code>NULL</code>, pass 0. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Buffer where the encrypted message is to be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">output_size</td><td>Size of the <code>output</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">output_length</td><td>On success, the number of bytes that make up the returned output.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a></td><td>The size of the <code>output</code> buffer is too small. You can determine a sufficient buffer size by calling <a class="el" href="crypto__sizes_8h.html#a66ba3bd93e5ec52870ccc3848778bad8">PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE</a>(<code>key_type</code>, <code>key_bits</code>, <code>alg</code>) where <code>key_type</code> and <code>key_bits</code> are the type and bit-size respectively of <code>key</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4deb59fec02297ec5d8b42178323f675">PSA_ERROR_INSUFFICIENT_ENTROPY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+</li>
+</ul>
+
+</div>
+</div>
+<a class="anchor" id="ga1b0db9d345b5048cdd39357ac2d56c07"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_asymmetric_sign </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>hash</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>hash_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>signature</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>signature_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>signature_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sign a hash or short message with a private key. </p>
+<p>Note that to perform a hash-and-sign signature algorithm, you must first calculate the hash by calling <a class="el" href="group__hash.html#ga8d72896cf70fc4d514c5c6b978912515">psa_hash_setup()</a>, <a class="el" href="group__hash.html#ga65b16ef97d7f650899b7db4b7d1112ff">psa_hash_update()</a> and <a class="el" href="group__hash.html#ga4795fd06a0067b0adcd92e9627b8c97e">psa_hash_finish()</a>. Then pass the resulting hash as the <code>hash</code> parameter to this function. You can use <a class="el" href="group__crypto__types.html#ga24cf6d7bcd2b9aeeeff86f07b6c674e3">PSA_ALG_SIGN_GET_HASH</a>(<code>alg</code>) to determine the hash algorithm to use.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to use for the operation. It must be an asymmetric key pair. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>A signature algorithm that is compatible with the type of <code>key</code>. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">hash</td><td>The hash or message to sign. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">hash_length</td><td>Size of the <code>hash</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">signature</td><td>Buffer where the signature is to be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">signature_size</td><td>Size of the <code>signature</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">signature_length</td><td>On success, the number of bytes that make up the returned signature value.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a></td><td>The size of the <code>signature</code> buffer is too small. You can determine a sufficient buffer size by calling <a class="el" href="crypto__sizes_8h.html#a77565b9b4fe6d8730fd2120f4c8378ab">PSA_ASYMMETRIC_SIGN_OUTPUT_SIZE</a>(<code>key_type</code>, <code>key_bits</code>, <code>alg</code>) where <code>key_type</code> and <code>key_bits</code> are the type and bit-size respectively of <code>key</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4deb59fec02297ec5d8b42178323f675">PSA_ERROR_INSUFFICIENT_ENTROPY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1b8e964c8d927e3d632325d762959eb7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_asymmetric_verify </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>hash</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>hash_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>signature</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>signature_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Verify the signature a hash or short message using a public key. </p>
+<p>Note that to perform a hash-and-sign signature algorithm, you must first calculate the hash by calling <a class="el" href="group__hash.html#ga8d72896cf70fc4d514c5c6b978912515">psa_hash_setup()</a>, <a class="el" href="group__hash.html#ga65b16ef97d7f650899b7db4b7d1112ff">psa_hash_update()</a> and <a class="el" href="group__hash.html#ga4795fd06a0067b0adcd92e9627b8c97e">psa_hash_finish()</a>. Then pass the resulting hash as the <code>hash</code> parameter to this function. You can use <a class="el" href="group__crypto__types.html#ga24cf6d7bcd2b9aeeeff86f07b6c674e3">PSA_ALG_SIGN_GET_HASH</a>(<code>alg</code>) to determine the hash algorithm to use.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to use for the operation. It must be a public key or an asymmetric key pair. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>A signature algorithm that is compatible with the type of <code>key</code>. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">hash</td><td>The hash or message whose signature is to be verified. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">hash_length</td><td>Size of the <code>hash</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">signature</td><td>Buffer containing the signature to verify. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">signature_length</td><td>Size of the <code>signature</code> buffer in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>The signature is valid. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga35927f755d232c4766de600f2c49e9f2">PSA_ERROR_INVALID_SIGNATURE</a></td><td>The calculation was perfomed successfully, but the passed signature is not a valid signature. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/group__cipher.html b/docs/html/group__cipher.html
new file mode 100644
index 0000000..0853f6d
--- /dev/null
+++ b/docs/html/group__cipher.html
@@ -0,0 +1,778 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Symmetric ciphers</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Symmetric ciphers</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga2da0541aabf9a4995cf2004e36311919"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#ga2da0541aabf9a4995cf2004e36311919">PSA_CIPHER_OPERATION_INIT</a>&#160;&#160;&#160;{0}</td></tr>
+<tr class="separator:ga2da0541aabf9a4995cf2004e36311919"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga1399de29db657e3737bb09927aae51fa"><td class="memItemLeft" align="right" valign="top">typedef struct psa_cipher_operation_s&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a></td></tr>
+<tr class="separator:ga1399de29db657e3737bb09927aae51fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gac76dda492d9a1ba6b327bff610ec17b2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#gac76dda492d9a1ba6b327bff610ec17b2">psa_cipher_encrypt</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *input, size_t input_length, uint8_t *output, size_t output_size, size_t *output_length)</td></tr>
+<tr class="separator:gac76dda492d9a1ba6b327bff610ec17b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga43d5991711ec45c98af0c1d99f6e0216"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#ga43d5991711ec45c98af0c1d99f6e0216">psa_cipher_decrypt</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *input, size_t input_length, uint8_t *output, size_t output_size, size_t *output_length)</td></tr>
+<tr class="separator:ga43d5991711ec45c98af0c1d99f6e0216"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2a7fc79a9d150d42dba99f40ee3a185e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#ga2a7fc79a9d150d42dba99f40ee3a185e">psa_cipher_encrypt_setup</a> (<a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg)</td></tr>
+<tr class="separator:ga2a7fc79a9d150d42dba99f40ee3a185e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaddf8504e5367cd0efb4415bdec004f44"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#gaddf8504e5367cd0efb4415bdec004f44">psa_cipher_decrypt_setup</a> (<a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg)</td></tr>
+<tr class="separator:gaddf8504e5367cd0efb4415bdec004f44"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga44857cf5e0c3d134a3c560f8ff5b50aa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#ga44857cf5e0c3d134a3c560f8ff5b50aa">psa_cipher_generate_iv</a> (<a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation, unsigned char *iv, size_t iv_size, size_t *iv_length)</td></tr>
+<tr class="separator:ga44857cf5e0c3d134a3c560f8ff5b50aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1359b2101f31637496ce7cc36c6e3d42"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#ga1359b2101f31637496ce7cc36c6e3d42">psa_cipher_set_iv</a> (<a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation, const unsigned char *iv, size_t iv_length)</td></tr>
+<tr class="separator:ga1359b2101f31637496ce7cc36c6e3d42"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafd0caea99cf1052527e4089d37f5ab91"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#gafd0caea99cf1052527e4089d37f5ab91">psa_cipher_update</a> (<a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation, const uint8_t *input, size_t input_length, unsigned char *output, size_t output_size, size_t *output_length)</td></tr>
+<tr class="separator:gafd0caea99cf1052527e4089d37f5ab91"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1dcb58b8befe23f8a4d7a1d49c99249b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#ga1dcb58b8befe23f8a4d7a1d49c99249b">psa_cipher_finish</a> (<a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation, uint8_t *output, size_t output_size, size_t *output_length)</td></tr>
+<tr class="separator:ga1dcb58b8befe23f8a4d7a1d49c99249b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaad482cdca2098bca0620596aaa02eaa4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cipher.html#gaad482cdca2098bca0620596aaa02eaa4">psa_cipher_abort</a> (<a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *operation)</td></tr>
+<tr class="separator:gaad482cdca2098bca0620596aaa02eaa4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ga2da0541aabf9a4995cf2004e36311919"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_CIPHER_OPERATION_INIT&#160;&#160;&#160;{0}</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>This macro returns a suitable initializer for a cipher operation object of type <a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a>. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ga1399de29db657e3737bb09927aae51fa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct psa_cipher_operation_s <a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The type of the state data structure for multipart cipher operations.</p>
+<p>Before calling any function on a cipher operation object, the application must initialize it by any of the following means:</p><ul>
+<li>Set the structure to all-bits-zero, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_cipher_operation_t operation;</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;memset(&amp;operation, 0, sizeof(operation));</div></div><!-- fragment --></li>
+<li>Initialize the structure to logical zero values, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_cipher_operation_t operation = {0};</div></div><!-- fragment --></li>
+<li>Initialize the structure to the initializer <a class="el" href="group__cipher.html#ga2da0541aabf9a4995cf2004e36311919">PSA_CIPHER_OPERATION_INIT</a>, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_cipher_operation_t operation = PSA_CIPHER_OPERATION_INIT;</div></div><!-- fragment --></li>
+<li>Assign the result of the function psa_cipher_operation_init() to the structure, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_cipher_operation_t operation;</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;operation = psa_cipher_operation_init();</div></div><!-- fragment --></li>
+</ul>
+<p>This is an implementation-defined <code>struct</code>. Applications should not make any assumptions about the content of this structure except as directed by the documentation of a specific implementation. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gaad482cdca2098bca0620596aaa02eaa4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_cipher_abort </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Abort a cipher operation.</p>
+<p>Aborting an operation frees all associated resources except for the <code>operation</code> structure itself. Once aborted, the operation object can be reused for another operation by calling <a class="el" href="group__cipher.html#ga2a7fc79a9d150d42dba99f40ee3a185e">psa_cipher_encrypt_setup()</a> or <a class="el" href="group__cipher.html#gaddf8504e5367cd0efb4415bdec004f44">psa_cipher_decrypt_setup()</a> again.</p>
+<p>You may call this function any time after the operation object has been initialized by any of the following methods:</p><ul>
+<li>A call to <a class="el" href="group__cipher.html#ga2a7fc79a9d150d42dba99f40ee3a185e">psa_cipher_encrypt_setup()</a> or <a class="el" href="group__cipher.html#gaddf8504e5367cd0efb4415bdec004f44">psa_cipher_decrypt_setup()</a>, whether it succeeds or not.</li>
+<li>Initializing the <code>struct</code> to all-bits-zero.</li>
+<li>Initializing the <code>struct</code> to logical zeros, e.g. <code>psa_cipher_operation_t operation = {0}</code>.</li>
+</ul>
+<p>In particular, calling <a class="el" href="group__cipher.html#gaad482cdca2098bca0620596aaa02eaa4">psa_cipher_abort()</a> after the operation has been terminated by a call to <a class="el" href="group__cipher.html#gaad482cdca2098bca0620596aaa02eaa4">psa_cipher_abort()</a> or <a class="el" href="group__cipher.html#ga1dcb58b8befe23f8a4d7a1d49c99249b">psa_cipher_finish()</a> is safe and has no effect.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Initialized cipher operation.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td><code>operation</code> is not an active cipher operation. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga43d5991711ec45c98af0c1d99f6e0216"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_cipher_decrypt </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>input</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>input_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>output_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>output_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Decrypt a message using a symmetric cipher.</p>
+<p>This function decrypts a message encrypted with a symmetric cipher.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to use for the operation. It must remain valid until the operation terminates. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>The cipher algorithm to compute (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#ga1d1a5a402ad89a2e68f12bfb535490eb">PSA_ALG_IS_CIPHER</a>(<code>alg</code>) is true). </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">input</td><td>Buffer containing the message to decrypt. This consists of the IV followed by the ciphertext proper. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">input_length</td><td>Size of the <code>input</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Buffer where the plaintext is to be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">output_size</td><td>Size of the <code>output</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">output_length</td><td>On success, the number of bytes that make up the output.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>key</code> is not compatible with <code>alg</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not supported or is not a cipher algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gaddf8504e5367cd0efb4415bdec004f44"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_cipher_decrypt_setup </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set the key for a multipart symmetric decryption operation.</p>
+<p>The sequence of operations to decrypt a message with a symmetric cipher is as follows:</p><ol type="1">
+<li>Allocate an operation object which will be passed to all the functions listed here.</li>
+<li>Initialize the operation object with one of the methods described in the documentation for <a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a>, e.g. PSA_CIPHER_OPERATION_INIT.</li>
+<li>Call <a class="el" href="group__cipher.html#gaddf8504e5367cd0efb4415bdec004f44">psa_cipher_decrypt_setup()</a> to specify the algorithm and key.</li>
+<li>Call <a class="el" href="group__cipher.html#ga1359b2101f31637496ce7cc36c6e3d42">psa_cipher_set_iv()</a> with the IV (initialization vector) for the decryption. If the IV is prepended to the ciphertext, you can call <a class="el" href="group__cipher.html#gafd0caea99cf1052527e4089d37f5ab91">psa_cipher_update()</a> on a buffer containing the IV followed by the beginning of the message.</li>
+<li>Call <a class="el" href="group__cipher.html#gafd0caea99cf1052527e4089d37f5ab91">psa_cipher_update()</a> zero, one or more times, passing a fragment of the message each time.</li>
+<li>Call <a class="el" href="group__cipher.html#ga1dcb58b8befe23f8a4d7a1d49c99249b">psa_cipher_finish()</a>.</li>
+</ol>
+<p>The application may call <a class="el" href="group__cipher.html#gaad482cdca2098bca0620596aaa02eaa4">psa_cipher_abort()</a> at any time after the operation has been initialized.</p>
+<p>After a successful call to <a class="el" href="group__cipher.html#gaddf8504e5367cd0efb4415bdec004f44">psa_cipher_decrypt_setup()</a>, the application must eventually terminate the operation. The following events terminate an operation:</p><ul>
+<li>A failed call to any of the <code>psa_cipher_xxx</code> functions.</li>
+<li>A call to <a class="el" href="group__cipher.html#ga1dcb58b8befe23f8a4d7a1d49c99249b">psa_cipher_finish()</a> or <a class="el" href="group__cipher.html#gaad482cdca2098bca0620596aaa02eaa4">psa_cipher_abort()</a>.</li>
+</ul>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>The operation object to set up. It must have been initialized as per the documentation for <a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> and not yet in use. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to use for the operation. It must remain valid until the operation terminates. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>The cipher algorithm to compute (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#ga1d1a5a402ad89a2e68f12bfb535490eb">PSA_ALG_IS_CIPHER</a>(<code>alg</code>) is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>key</code> is not compatible with <code>alg</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not supported or is not a cipher algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gac76dda492d9a1ba6b327bff610ec17b2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_cipher_encrypt </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>input</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>input_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>output_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>output_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Encrypt a message using a symmetric cipher.</p>
+<p>This function encrypts a message with a random IV (initialization vector).</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to use for the operation. It must remain valid until the operation terminates. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>The cipher algorithm to compute (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#ga1d1a5a402ad89a2e68f12bfb535490eb">PSA_ALG_IS_CIPHER</a>(<code>alg</code>) is true). </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">input</td><td>Buffer containing the message to encrypt. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">input_length</td><td>Size of the <code>input</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Buffer where the output is to be written. The output contains the IV followed by the ciphertext proper. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">output_size</td><td>Size of the <code>output</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">output_length</td><td>On success, the number of bytes that make up the output.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>key</code> is not compatible with <code>alg</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not supported or is not a cipher algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2a7fc79a9d150d42dba99f40ee3a185e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_cipher_encrypt_setup </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set the key for a multipart symmetric encryption operation.</p>
+<p>The sequence of operations to encrypt a message with a symmetric cipher is as follows:</p><ol type="1">
+<li>Allocate an operation object which will be passed to all the functions listed here.</li>
+<li>Initialize the operation object with one of the methods described in the documentation for <a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a>, e.g. PSA_CIPHER_OPERATION_INIT.</li>
+<li>Call <a class="el" href="group__cipher.html#ga2a7fc79a9d150d42dba99f40ee3a185e">psa_cipher_encrypt_setup()</a> to specify the algorithm and key.</li>
+<li>Call either <a class="el" href="group__cipher.html#ga44857cf5e0c3d134a3c560f8ff5b50aa">psa_cipher_generate_iv()</a> or <a class="el" href="group__cipher.html#ga1359b2101f31637496ce7cc36c6e3d42">psa_cipher_set_iv()</a> to generate or set the IV (initialization vector). You should use <a class="el" href="group__cipher.html#ga44857cf5e0c3d134a3c560f8ff5b50aa">psa_cipher_generate_iv()</a> unless the protocol you are implementing requires a specific IV value.</li>
+<li>Call <a class="el" href="group__cipher.html#gafd0caea99cf1052527e4089d37f5ab91">psa_cipher_update()</a> zero, one or more times, passing a fragment of the message each time.</li>
+<li>Call <a class="el" href="group__cipher.html#ga1dcb58b8befe23f8a4d7a1d49c99249b">psa_cipher_finish()</a>.</li>
+</ol>
+<p>The application may call <a class="el" href="group__cipher.html#gaad482cdca2098bca0620596aaa02eaa4">psa_cipher_abort()</a> at any time after the operation has been initialized.</p>
+<p>After a successful call to <a class="el" href="group__cipher.html#ga2a7fc79a9d150d42dba99f40ee3a185e">psa_cipher_encrypt_setup()</a>, the application must eventually terminate the operation. The following events terminate an operation:</p><ul>
+<li>A failed call to any of the <code>psa_cipher_xxx</code> functions.</li>
+<li>A call to <a class="el" href="group__cipher.html#ga1dcb58b8befe23f8a4d7a1d49c99249b">psa_cipher_finish()</a> or <a class="el" href="group__cipher.html#gaad482cdca2098bca0620596aaa02eaa4">psa_cipher_abort()</a>.</li>
+</ul>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>The operation object to set up. It must have been initialized as per the documentation for <a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> and not yet in use. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to use for the operation. It must remain valid until the operation terminates. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>The cipher algorithm to compute (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#ga1d1a5a402ad89a2e68f12bfb535490eb">PSA_ALG_IS_CIPHER</a>(<code>alg</code>) is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>key</code> is not compatible with <code>alg</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not supported or is not a cipher algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1dcb58b8befe23f8a4d7a1d49c99249b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_cipher_finish </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>output_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>output_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Finish encrypting or decrypting a message in a cipher operation.</p>
+<p>The application must call <a class="el" href="group__cipher.html#ga2a7fc79a9d150d42dba99f40ee3a185e">psa_cipher_encrypt_setup()</a> or <a class="el" href="group__cipher.html#gaddf8504e5367cd0efb4415bdec004f44">psa_cipher_decrypt_setup()</a> before calling this function. The choice of setup function determines whether this function encrypts or decrypts its input.</p>
+<p>This function finishes the encryption or decryption of the message formed by concatenating the inputs passed to preceding calls to <a class="el" href="group__cipher.html#gafd0caea99cf1052527e4089d37f5ab91">psa_cipher_update()</a>.</p>
+<p>When this function returns, the operation becomes inactive.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Active cipher operation. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Buffer where the output is to be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">output_size</td><td>Size of the <code>output</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">output_length</td><td>On success, the number of bytes that make up the returned output.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The operation state is not valid (not set up, IV required but not set, or already completed). </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a></td><td>The size of the <code>output</code> buffer is too small. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga44857cf5e0c3d134a3c560f8ff5b50aa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_cipher_generate_iv </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned char *&#160;</td>
+          <td class="paramname"><em>iv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>iv_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>iv_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generate an IV for a symmetric encryption operation.</p>
+<p>This function generates a random IV (initialization vector), nonce or initial counter value for the encryption operation as appropriate for the chosen algorithm, key type and key size.</p>
+<p>The application must call <a class="el" href="group__cipher.html#ga2a7fc79a9d150d42dba99f40ee3a185e">psa_cipher_encrypt_setup()</a> before calling this function.</p>
+<p>If this function returns an error status, the operation becomes inactive.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Active cipher operation. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">iv</td><td>Buffer where the generated IV is to be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">iv_size</td><td>Size of the <code>iv</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">iv_length</td><td>On success, the number of bytes of the generated IV.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The operation state is not valid (not set up, or IV already set). </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a></td><td>The size of the <code>iv</code> buffer is too small. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1359b2101f31637496ce7cc36c6e3d42"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_cipher_set_iv </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const unsigned char *&#160;</td>
+          <td class="paramname"><em>iv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>iv_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set the IV for a symmetric encryption or decryption operation.</p>
+<p>This function sets the IV (initialization vector), nonce or initial counter value for the encryption or decryption operation.</p>
+<p>The application must call <a class="el" href="group__cipher.html#ga2a7fc79a9d150d42dba99f40ee3a185e">psa_cipher_encrypt_setup()</a> before calling this function.</p>
+<p>If this function returns an error status, the operation becomes inactive.</p>
+<dl class="section note"><dt>Note</dt><dd>When encrypting, applications should use <a class="el" href="group__cipher.html#ga44857cf5e0c3d134a3c560f8ff5b50aa">psa_cipher_generate_iv()</a> instead of this function, unless implementing a protocol that requires a non-random IV.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Active cipher operation. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">iv</td><td>Buffer containing the IV to use. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">iv_length</td><td>Size of the IV in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The operation state is not valid (not set up, or IV already set). </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td>The size of <code>iv</code> is not acceptable for the chosen algorithm, or the chosen algorithm does not use an IV. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gafd0caea99cf1052527e4089d37f5ab91"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_cipher_update </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__cipher.html#ga1399de29db657e3737bb09927aae51fa">psa_cipher_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>input</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>input_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned char *&#160;</td>
+          <td class="paramname"><em>output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>output_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>output_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Encrypt or decrypt a message fragment in an active cipher operation.</p>
+<p>Before calling this function, you must:</p><ol type="1">
+<li>Call either <a class="el" href="group__cipher.html#ga2a7fc79a9d150d42dba99f40ee3a185e">psa_cipher_encrypt_setup()</a> or <a class="el" href="group__cipher.html#gaddf8504e5367cd0efb4415bdec004f44">psa_cipher_decrypt_setup()</a>. The choice of setup function determines whether this function encrypts or decrypts its input.</li>
+<li>If the algorithm requires an IV, call <a class="el" href="group__cipher.html#ga44857cf5e0c3d134a3c560f8ff5b50aa">psa_cipher_generate_iv()</a> (recommended when encrypting) or <a class="el" href="group__cipher.html#ga1359b2101f31637496ce7cc36c6e3d42">psa_cipher_set_iv()</a>.</li>
+</ol>
+<p>If this function returns an error status, the operation becomes inactive.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Active cipher operation. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">input</td><td>Buffer containing the message fragment to encrypt or decrypt. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">input_length</td><td>Size of the <code>input</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Buffer where the output is to be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">output_size</td><td>Size of the <code>output</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">output_length</td><td>On success, the number of bytes that make up the returned output.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The operation state is not valid (not set up, IV required but not set, or already completed). </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a></td><td>The size of the <code>output</code> buffer is too small. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/group__crypto__types.html b/docs/html/group__crypto__types.html
new file mode 100644
index 0000000..804c4ec
--- /dev/null
+++ b/docs/html/group__crypto__types.html
@@ -0,0 +1,2552 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Key and algorithm types</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a>  </div>
+  <div class="headertitle">
+<div class="title">Key and algorithm types</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:gafce7ab2b54ce97ea5bff73f13a9f3e5b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gafce7ab2b54ce97ea5bff73f13a9f3e5b">PSA_KEY_TYPE_NONE</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x00000000)</td></tr>
+<tr class="separator:gafce7ab2b54ce97ea5bff73f13a9f3e5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8dbaed2fdb1ebae8aa127ad3988516f7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga8dbaed2fdb1ebae8aa127ad3988516f7">PSA_KEY_TYPE_VENDOR_FLAG</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x80000000)</td></tr>
+<tr class="separator:ga8dbaed2fdb1ebae8aa127ad3988516f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6eeda1b2a1550050cf68dbcac35ad8ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6eeda1b2a1550050cf68dbcac35ad8ac"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_CATEGORY_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70000000)</td></tr>
+<tr class="separator:ga6eeda1b2a1550050cf68dbcac35ad8ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8f214beb04334be08f927f227f097ef1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8f214beb04334be08f927f227f097ef1"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_CATEGORY_SYMMETRIC</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000000)</td></tr>
+<tr class="separator:ga8f214beb04334be08f927f227f097ef1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab8af75718c5e7b8987720a3fe8abb18f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab8af75718c5e7b8987720a3fe8abb18f"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_CATEGORY_RAW</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x50000000)</td></tr>
+<tr class="separator:gab8af75718c5e7b8987720a3fe8abb18f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga58b975beeee1f937cecb71c8051c6357"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga58b975beeee1f937cecb71c8051c6357"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x60000000)</td></tr>
+<tr class="separator:ga58b975beeee1f937cecb71c8051c6357"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga708196a91ec0384de98e092b9a16f5e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga708196a91ec0384de98e092b9a16f5e8"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_CATEGORY_KEY_PAIR</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70000000)</td></tr>
+<tr class="separator:ga708196a91ec0384de98e092b9a16f5e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5a77cb4db2d02ffce77631339e3240f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5a77cb4db2d02ffce77631339e3240f4"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_CATEGORY_FLAG_PAIR</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x10000000)</td></tr>
+<tr class="separator:ga5a77cb4db2d02ffce77631339e3240f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadbe4c086a6562aefe344bc79e51bdfd3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gadbe4c086a6562aefe344bc79e51bdfd3">PSA_KEY_TYPE_IS_VENDOR_DEFINED</a>(type)&#160;&#160;&#160;(((type) &amp; <a class="el" href="group__crypto__types.html#ga8dbaed2fdb1ebae8aa127ad3988516f7">PSA_KEY_TYPE_VENDOR_FLAG</a>) != 0)</td></tr>
+<tr class="separator:gadbe4c086a6562aefe344bc79e51bdfd3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaef86ce4e810e1c2c76068ac874bfef54"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaef86ce4e810e1c2c76068ac874bfef54">PSA_KEY_TYPE_IS_UNSTRUCTURED</a>(type)</td></tr>
+<tr class="separator:gaef86ce4e810e1c2c76068ac874bfef54"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab138ae2ebf2905dfbaf4154db2620939"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gab138ae2ebf2905dfbaf4154db2620939">PSA_KEY_TYPE_IS_ASYMMETRIC</a>(type)</td></tr>
+<tr class="separator:gab138ae2ebf2905dfbaf4154db2620939"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac674a0f059bc0cb72b47f0c517b4f45b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gac674a0f059bc0cb72b47f0c517b4f45b">PSA_KEY_TYPE_IS_PUBLIC_KEY</a>(type)&#160;&#160;&#160;(((type) &amp; PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY)</td></tr>
+<tr class="separator:gac674a0f059bc0cb72b47f0c517b4f45b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac14c6d6e1b2b7f4a92a7b757465cff29"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gac14c6d6e1b2b7f4a92a7b757465cff29">PSA_KEY_TYPE_IS_KEYPAIR</a>(type)&#160;&#160;&#160;(((type) &amp; PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_KEY_PAIR)</td></tr>
+<tr class="separator:gac14c6d6e1b2b7f4a92a7b757465cff29"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf09f1ca1de6a7e7cff0fe516f3f6c91d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaf09f1ca1de6a7e7cff0fe516f3f6c91d">PSA_KEY_TYPE_KEYPAIR_OF_PUBLIC_KEY</a>(type)&#160;&#160;&#160;((type) | PSA_KEY_TYPE_CATEGORY_FLAG_PAIR)</td></tr>
+<tr class="separator:gaf09f1ca1de6a7e7cff0fe516f3f6c91d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gace08e46dd7cbf642d50d982a25d02bec"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a>(type)&#160;&#160;&#160;((type) &amp; ~PSA_KEY_TYPE_CATEGORY_FLAG_PAIR)</td></tr>
+<tr class="separator:gace08e46dd7cbf642d50d982a25d02bec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa97f92025533102616b32d571c940d80"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa97f92025533102616b32d571c940d80">PSA_KEY_TYPE_RAW_DATA</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x50000001)</td></tr>
+<tr class="separator:gaa97f92025533102616b32d571c940d80"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga92d989f4ca64abd00f463defd773a6f8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga92d989f4ca64abd00f463defd773a6f8">PSA_KEY_TYPE_HMAC</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x51000000)</td></tr>
+<tr class="separator:ga92d989f4ca64abd00f463defd773a6f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae871b2357b8593f33bfd51abbf93ebb1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gae871b2357b8593f33bfd51abbf93ebb1">PSA_KEY_TYPE_DERIVE</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x52000000)</td></tr>
+<tr class="separator:gae871b2357b8593f33bfd51abbf93ebb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6ee54579dcf278c677eda4bb1a29575e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga6ee54579dcf278c677eda4bb1a29575e">PSA_KEY_TYPE_AES</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000001)</td></tr>
+<tr class="separator:ga6ee54579dcf278c677eda4bb1a29575e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga577562bfbbc691c820d55ec308333138"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga577562bfbbc691c820d55ec308333138">PSA_KEY_TYPE_DES</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000002)</td></tr>
+<tr class="separator:ga577562bfbbc691c820d55ec308333138"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad8e5da742343fd5519f9d8a630c2ed81"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gad8e5da742343fd5519f9d8a630c2ed81">PSA_KEY_TYPE_CAMELLIA</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000003)</td></tr>
+<tr class="separator:gad8e5da742343fd5519f9d8a630c2ed81"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae4d46e83f910dcaa126000a8ed03cde9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gae4d46e83f910dcaa126000a8ed03cde9">PSA_KEY_TYPE_ARC4</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000004)</td></tr>
+<tr class="separator:gae4d46e83f910dcaa126000a8ed03cde9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9ba0878f56c8bcd1995ac017a74f513b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga9ba0878f56c8bcd1995ac017a74f513b">PSA_KEY_TYPE_RSA_PUBLIC_KEY</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x60010000)</td></tr>
+<tr class="separator:ga9ba0878f56c8bcd1995ac017a74f513b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga581f50687f5d650456925278948f2799"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga581f50687f5d650456925278948f2799">PSA_KEY_TYPE_RSA_KEYPAIR</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70010000)</td></tr>
+<tr class="separator:ga581f50687f5d650456925278948f2799"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0e1d8f241228e49c9cadadfb4579ef1a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga0e1d8f241228e49c9cadadfb4579ef1a">PSA_KEY_TYPE_IS_RSA</a>(type)&#160;&#160;&#160;(<a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a>(type) == <a class="el" href="group__crypto__types.html#ga9ba0878f56c8bcd1995ac017a74f513b">PSA_KEY_TYPE_RSA_PUBLIC_KEY</a>)</td></tr>
+<tr class="separator:ga0e1d8f241228e49c9cadadfb4579ef1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5e7439c2905136366c3a876e62e5ddfc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga5e7439c2905136366c3a876e62e5ddfc">PSA_KEY_TYPE_DSA_PUBLIC_KEY</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x60020000)</td></tr>
+<tr class="separator:ga5e7439c2905136366c3a876e62e5ddfc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga011010ee28c20388f3d89fb27088ed62"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga011010ee28c20388f3d89fb27088ed62">PSA_KEY_TYPE_DSA_KEYPAIR</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70020000)</td></tr>
+<tr class="separator:ga011010ee28c20388f3d89fb27088ed62"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga273fdfcf23eb0624f8b63d2321cf95c1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga273fdfcf23eb0624f8b63d2321cf95c1">PSA_KEY_TYPE_IS_DSA</a>(type)&#160;&#160;&#160;(<a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a>(type) == <a class="el" href="group__crypto__types.html#ga5e7439c2905136366c3a876e62e5ddfc">PSA_KEY_TYPE_DSA_PUBLIC_KEY</a>)</td></tr>
+<tr class="separator:ga273fdfcf23eb0624f8b63d2321cf95c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad8d37a32a305dda9fb4af1707aace47c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad8d37a32a305dda9fb4af1707aace47c"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x60030000)</td></tr>
+<tr class="separator:gad8d37a32a305dda9fb4af1707aace47c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6754658749714c6ac674bdf6d2d40767"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6754658749714c6ac674bdf6d2d40767"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_ECC_KEYPAIR_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70030000)</td></tr>
+<tr class="separator:ga6754658749714c6ac674bdf6d2d40767"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadc2a3c0041ac1d0a2b6f421d8e089b25"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gadc2a3c0041ac1d0a2b6f421d8e089b25"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_KEY_TYPE_ECC_CURVE_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x0000ffff)</td></tr>
+<tr class="separator:gadc2a3c0041ac1d0a2b6f421d8e089b25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadf3ad65d157bf5282849c954bf3f51af"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gadf3ad65d157bf5282849c954bf3f51af">PSA_KEY_TYPE_ECC_KEYPAIR</a>(curve)&#160;&#160;&#160;(PSA_KEY_TYPE_ECC_KEYPAIR_BASE | (curve))</td></tr>
+<tr class="separator:gadf3ad65d157bf5282849c954bf3f51af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad54c03d3b47020e571a72cd01d978cf2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gad54c03d3b47020e571a72cd01d978cf2">PSA_KEY_TYPE_ECC_PUBLIC_KEY</a>(curve)&#160;&#160;&#160;(PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE | (curve))</td></tr>
+<tr class="separator:gad54c03d3b47020e571a72cd01d978cf2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga88e01fa06b585654689a99bcc06bbe66"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga88e01fa06b585654689a99bcc06bbe66">PSA_KEY_TYPE_IS_ECC</a>(type)</td></tr>
+<tr class="separator:ga88e01fa06b585654689a99bcc06bbe66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7bf101b671e8cf26f4cb08fcb679db4b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga7bf101b671e8cf26f4cb08fcb679db4b">PSA_KEY_TYPE_IS_ECC_KEYPAIR</a>(type)</td></tr>
+<tr class="separator:ga7bf101b671e8cf26f4cb08fcb679db4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5af146a173b0c84d7e737e2fb6a3c0a7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga5af146a173b0c84d7e737e2fb6a3c0a7">PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY</a>(type)</td></tr>
+<tr class="separator:ga5af146a173b0c84d7e737e2fb6a3c0a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0c567210e6f80aa8f2aa87efa7a3a3f9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga0c567210e6f80aa8f2aa87efa7a3a3f9">PSA_KEY_TYPE_GET_CURVE</a>(type)</td></tr>
+<tr class="separator:ga0c567210e6f80aa8f2aa87efa7a3a3f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4201013d5947c375fae7311b0f98bac7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4201013d5947c375fae7311b0f98bac7"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT163K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0001)</td></tr>
+<tr class="separator:ga4201013d5947c375fae7311b0f98bac7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaca8816b785f492a8795b5276977d1369"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaca8816b785f492a8795b5276977d1369"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT163R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0002)</td></tr>
+<tr class="separator:gaca8816b785f492a8795b5276977d1369"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4ab7a853ceb3ad0a525ecb571633a1ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4ab7a853ceb3ad0a525ecb571633a1ca"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT163R2</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0003)</td></tr>
+<tr class="separator:ga4ab7a853ceb3ad0a525ecb571633a1ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac9fd11da90ca67649a5f51a158afe5f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac9fd11da90ca67649a5f51a158afe5f3"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT193R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0004)</td></tr>
+<tr class="separator:gac9fd11da90ca67649a5f51a158afe5f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7a77f5e385f6439dae5857a7f35756eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7a77f5e385f6439dae5857a7f35756eb"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT193R2</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0005)</td></tr>
+<tr class="separator:ga7a77f5e385f6439dae5857a7f35756eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga36e409c36983e41db5db202b1d2095b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga36e409c36983e41db5db202b1d2095b5"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT233K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0006)</td></tr>
+<tr class="separator:ga36e409c36983e41db5db202b1d2095b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga54997a9f8ef752c6d717171e01c31019"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga54997a9f8ef752c6d717171e01c31019"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT233R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0007)</td></tr>
+<tr class="separator:ga54997a9f8ef752c6d717171e01c31019"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaabccf2759188c3e98d82faa5d8dfcd8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaabccf2759188c3e98d82faa5d8dfcd8c"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT239K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0008)</td></tr>
+<tr class="separator:gaabccf2759188c3e98d82faa5d8dfcd8c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga28c765d75773b5fe083219e7c0b054f9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga28c765d75773b5fe083219e7c0b054f9"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT283K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0009)</td></tr>
+<tr class="separator:ga28c765d75773b5fe083219e7c0b054f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafd8ecacea0d9e7e1a0247c047baf3372"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafd8ecacea0d9e7e1a0247c047baf3372"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT283R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x000a)</td></tr>
+<tr class="separator:gafd8ecacea0d9e7e1a0247c047baf3372"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2bf301617cc84a6f2b36a86cc29eaf4d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2bf301617cc84a6f2b36a86cc29eaf4d"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT409K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x000b)</td></tr>
+<tr class="separator:ga2bf301617cc84a6f2b36a86cc29eaf4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae41caa1cc16d3c35769b6edcb62c8957"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae41caa1cc16d3c35769b6edcb62c8957"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT409R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x000c)</td></tr>
+<tr class="separator:gae41caa1cc16d3c35769b6edcb62c8957"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2043aa519549a6194d132d81816879bc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2043aa519549a6194d132d81816879bc"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT571K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x000d)</td></tr>
+<tr class="separator:ga2043aa519549a6194d132d81816879bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1607d2cb9591b56dbe1295bedc33e19e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1607d2cb9591b56dbe1295bedc33e19e"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECT571R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x000e)</td></tr>
+<tr class="separator:ga1607d2cb9591b56dbe1295bedc33e19e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2ad14935d244d93ee0e4cfe9b1f218a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2ad14935d244d93ee0e4cfe9b1f218a4"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP160K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x000f)</td></tr>
+<tr class="separator:ga2ad14935d244d93ee0e4cfe9b1f218a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga35ed41203039e94eb4855cc70f28f7f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga35ed41203039e94eb4855cc70f28f7f0"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP160R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0010)</td></tr>
+<tr class="separator:ga35ed41203039e94eb4855cc70f28f7f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac465f57c34914a01aea8c220a613dfe6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac465f57c34914a01aea8c220a613dfe6"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP160R2</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0011)</td></tr>
+<tr class="separator:gac465f57c34914a01aea8c220a613dfe6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga58c806d45ab350287ddc49da833bd558"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga58c806d45ab350287ddc49da833bd558"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP192K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0012)</td></tr>
+<tr class="separator:ga58c806d45ab350287ddc49da833bd558"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5aa3ceff4603fa3fafd8f2286c5d3e4a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5aa3ceff4603fa3fafd8f2286c5d3e4a"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP192R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0013)</td></tr>
+<tr class="separator:ga5aa3ceff4603fa3fafd8f2286c5d3e4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gabfaaab2eaab0ac360e41c1aff6133cdf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabfaaab2eaab0ac360e41c1aff6133cdf"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP224K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0014)</td></tr>
+<tr class="separator:gabfaaab2eaab0ac360e41c1aff6133cdf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8d1d21b6b87ba4158235b876ae79031d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8d1d21b6b87ba4158235b876ae79031d"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP224R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0015)</td></tr>
+<tr class="separator:ga8d1d21b6b87ba4158235b876ae79031d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaaa61941f815aff976a1debd910b1704c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaaa61941f815aff976a1debd910b1704c"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP256K1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0016)</td></tr>
+<tr class="separator:gaaa61941f815aff976a1debd910b1704c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga11224270225c2b2dbfa2ab01073a4e93"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga11224270225c2b2dbfa2ab01073a4e93"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP256R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0017)</td></tr>
+<tr class="separator:ga11224270225c2b2dbfa2ab01073a4e93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3e870a36493143507a01a28c70790fa3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3e870a36493143507a01a28c70790fa3"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP384R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0018)</td></tr>
+<tr class="separator:ga3e870a36493143507a01a28c70790fa3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4482ff6155006ff509071c32ce263fdf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4482ff6155006ff509071c32ce263fdf"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_SECP521R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x0019)</td></tr>
+<tr class="separator:ga4482ff6155006ff509071c32ce263fdf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa999b69c56af0cc1cebf4596f8578191"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa999b69c56af0cc1cebf4596f8578191"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_BRAINPOOL_P256R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x001a)</td></tr>
+<tr class="separator:gaa999b69c56af0cc1cebf4596f8578191"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga79f95ed8050f2dc7750cbac212c6e687"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga79f95ed8050f2dc7750cbac212c6e687"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_BRAINPOOL_P384R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x001b)</td></tr>
+<tr class="separator:ga79f95ed8050f2dc7750cbac212c6e687"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa03a2dc6096f336be3d68a1f7405e86c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa03a2dc6096f336be3d68a1f7405e86c"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_BRAINPOOL_P512R1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x001c)</td></tr>
+<tr class="separator:gaa03a2dc6096f336be3d68a1f7405e86c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac94faf3b8d9884221541f51f26b11c7a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac94faf3b8d9884221541f51f26b11c7a"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_CURVE25519</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x001d)</td></tr>
+<tr class="separator:gac94faf3b8d9884221541f51f26b11c7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga902b0e91eff920873b3b59c740854305"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga902b0e91eff920873b3b59c740854305"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ECC_CURVE_CURVE448</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) 0x001e)</td></tr>
+<tr class="separator:ga902b0e91eff920873b3b59c740854305"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga325a340d7c72d99d3a678eb210bf6e0a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga325a340d7c72d99d3a678eb210bf6e0a">PSA_KEY_TYPE_DH_PUBLIC_KEY</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x60040000)</td></tr>
+<tr class="separator:ga325a340d7c72d99d3a678eb210bf6e0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga39b63c6b97a62a316c0660bf72b2fdd5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga39b63c6b97a62a316c0660bf72b2fdd5">PSA_KEY_TYPE_DH_KEYPAIR</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70040000)</td></tr>
+<tr class="separator:ga39b63c6b97a62a316c0660bf72b2fdd5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga248ae35c0e2becaebbf479fc1c3a3b0e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga248ae35c0e2becaebbf479fc1c3a3b0e">PSA_KEY_TYPE_IS_DH</a>(type)&#160;&#160;&#160;(<a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a>(type) == <a class="el" href="group__crypto__types.html#ga325a340d7c72d99d3a678eb210bf6e0a">PSA_KEY_TYPE_DH_PUBLIC_KEY</a>)</td></tr>
+<tr class="separator:ga248ae35c0e2becaebbf479fc1c3a3b0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacaa366bdeb0413e63e87a667c5457b2e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gacaa366bdeb0413e63e87a667c5457b2e">PSA_BLOCK_CIPHER_BLOCK_SIZE</a>(type)</td></tr>
+<tr class="separator:gacaa366bdeb0413e63e87a667c5457b2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf5d76750b6cfe3e7f0c8e9eee1162318"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf5d76750b6cfe3e7f0c8e9eee1162318"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_VENDOR_FLAG</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x80000000)</td></tr>
+<tr class="separator:gaf5d76750b6cfe3e7f0c8e9eee1162318"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga25e918c465b4421dbfaedad6b693d110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga25e918c465b4421dbfaedad6b693d110"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x7f000000)</td></tr>
+<tr class="separator:ga25e918c465b4421dbfaedad6b693d110"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafd048e1835b80e6daaff7fddce699757"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafd048e1835b80e6daaff7fddce699757"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_HASH</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000000)</td></tr>
+<tr class="separator:gafd048e1835b80e6daaff7fddce699757"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5e6e0039d0b0d18afb3e13e5b9602b3a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5e6e0039d0b0d18afb3e13e5b9602b3a"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_MAC</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x02000000)</td></tr>
+<tr class="separator:ga5e6e0039d0b0d18afb3e13e5b9602b3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga68228a619db59eba93fd13e9129dbfe2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga68228a619db59eba93fd13e9129dbfe2"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_CIPHER</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04000000)</td></tr>
+<tr class="separator:ga68228a619db59eba93fd13e9129dbfe2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga37fdd9cac2552f1568f38e091a826549"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga37fdd9cac2552f1568f38e091a826549"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_AEAD</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x06000000)</td></tr>
+<tr class="separator:ga37fdd9cac2552f1568f38e091a826549"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga68a0af1dd89b33fb1e53139f654988f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga68a0af1dd89b33fb1e53139f654988f6"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_SIGN</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10000000)</td></tr>
+<tr class="separator:ga68a0af1dd89b33fb1e53139f654988f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga72f46c8256b760b174e6db61a61cd608"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga72f46c8256b760b174e6db61a61cd608"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x12000000)</td></tr>
+<tr class="separator:ga72f46c8256b760b174e6db61a61cd608"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac185b2274dd4e5f0b97c43334c2e478f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac185b2274dd4e5f0b97c43334c2e478f"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_KEY_DERIVATION</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x20000000)</td></tr>
+<tr class="separator:gac185b2274dd4e5f0b97c43334c2e478f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga808e397a4891c612df4a5b20eebc2fac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga808e397a4891c612df4a5b20eebc2fac"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CATEGORY_KEY_AGREEMENT</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x30000000)</td></tr>
+<tr class="separator:ga808e397a4891c612df4a5b20eebc2fac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2396d8ba67096b3ebc69bc351a74c78b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2396d8ba67096b3ebc69bc351a74c78b"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_VENDOR_DEFINED</b>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_VENDOR_FLAG) != 0)</td></tr>
+<tr class="separator:ga2396d8ba67096b3ebc69bc351a74c78b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac9280662bb482590b4b33d1dcd32930f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">PSA_ALG_IS_HASH</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_HASH)</td></tr>
+<tr class="separator:gac9280662bb482590b4b33d1dcd32930f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaca7aee4c9dde316b3b1a150a26eab776"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaca7aee4c9dde316b3b1a150a26eab776">PSA_ALG_IS_MAC</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_MAC)</td></tr>
+<tr class="separator:gaca7aee4c9dde316b3b1a150a26eab776"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1d1a5a402ad89a2e68f12bfb535490eb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga1d1a5a402ad89a2e68f12bfb535490eb">PSA_ALG_IS_CIPHER</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_CIPHER)</td></tr>
+<tr class="separator:ga1d1a5a402ad89a2e68f12bfb535490eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1d44829d60065eaa4ac9a703e7d6abc8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">PSA_ALG_IS_AEAD</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_AEAD)</td></tr>
+<tr class="separator:ga1d44829d60065eaa4ac9a703e7d6abc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6d490d0904e0698f6c1268a89d72ff31"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga6d490d0904e0698f6c1268a89d72ff31">PSA_ALG_IS_SIGN</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_SIGN)</td></tr>
+<tr class="separator:ga6d490d0904e0698f6c1268a89d72ff31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga41d2ee937d54efd76bd54a97b2ebc08a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga41d2ee937d54efd76bd54a97b2ebc08a">PSA_ALG_IS_ASYMMETRIC_ENCRYPTION</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION)</td></tr>
+<tr class="separator:ga41d2ee937d54efd76bd54a97b2ebc08a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab19961aac97f3856f83057b04ba7c5f5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab19961aac97f3856f83057b04ba7c5f5"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_KEY_SELECTION_FLAG</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000000)</td></tr>
+<tr class="separator:gab19961aac97f3856f83057b04ba7c5f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga59753742cb06553bd22751bbef472b6f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga59753742cb06553bd22751bbef472b6f">PSA_ALG_IS_KEY_AGREEMENT</a>(alg)</td></tr>
+<tr class="separator:ga59753742cb06553bd22751bbef472b6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf8b90c648aa53dbd06c236695e300cd0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaf8b90c648aa53dbd06c236695e300cd0">PSA_ALG_IS_KEY_DERIVATION</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_KEY_DERIVATION)</td></tr>
+<tr class="separator:gaf8b90c648aa53dbd06c236695e300cd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga51b1834ee5e98c6a83c2cfc7699f9077"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga51b1834ee5e98c6a83c2cfc7699f9077">PSA_ALG_IS_KEY_SELECTION</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_KEY_SELECTION)</td></tr>
+<tr class="separator:ga51b1834ee5e98c6a83c2cfc7699f9077"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac41a7077aef55bb20c629c8949d43c57"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac41a7077aef55bb20c629c8949d43c57"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_HASH_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x000000ff)</td></tr>
+<tr class="separator:gac41a7077aef55bb20c629c8949d43c57"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab076ca67238cb4ebd81556db8f3dbac1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab076ca67238cb4ebd81556db8f3dbac1"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_MD2</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000001)</td></tr>
+<tr class="separator:gab076ca67238cb4ebd81556db8f3dbac1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaac7ab8c28c117ef4ddf01affc8d3ceb2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaac7ab8c28c117ef4ddf01affc8d3ceb2"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_MD4</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000002)</td></tr>
+<tr class="separator:gaac7ab8c28c117ef4ddf01affc8d3ceb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gade591d9286d23382eb5cec099c84180d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gade591d9286d23382eb5cec099c84180d"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_MD5</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000003)</td></tr>
+<tr class="separator:gade591d9286d23382eb5cec099c84180d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6c5d3a32cda59086f07b85ef007033dd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6c5d3a32cda59086f07b85ef007033dd"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_RIPEMD160</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000004)</td></tr>
+<tr class="separator:ga6c5d3a32cda59086f07b85ef007033dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3fca4e9f9ad4a1158817d1850dee82e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3fca4e9f9ad4a1158817d1850dee82e5"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_SHA_1</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000005)</td></tr>
+<tr class="separator:ga3fca4e9f9ad4a1158817d1850dee82e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga25d6a3244d10a7148fe6b026d1979f7b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga25d6a3244d10a7148fe6b026d1979f7b">PSA_ALG_SHA_224</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000008)</td></tr>
+<tr class="separator:ga25d6a3244d10a7148fe6b026d1979f7b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga619471f978e13cdd0a1e37145e4bf341"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga619471f978e13cdd0a1e37145e4bf341">PSA_ALG_SHA_256</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000009)</td></tr>
+<tr class="separator:ga619471f978e13cdd0a1e37145e4bf341"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga58af64dd9a86a287e8da9ed7739eead4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga58af64dd9a86a287e8da9ed7739eead4">PSA_ALG_SHA_384</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x0100000a)</td></tr>
+<tr class="separator:ga58af64dd9a86a287e8da9ed7739eead4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafba3ae409f46d3dd7f37a0910660c3e9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gafba3ae409f46d3dd7f37a0910660c3e9">PSA_ALG_SHA_512</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x0100000b)</td></tr>
+<tr class="separator:gafba3ae409f46d3dd7f37a0910660c3e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3fe2d7c3c80e3186ca78d16a35d5d931"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga3fe2d7c3c80e3186ca78d16a35d5d931">PSA_ALG_SHA_512_224</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x0100000c)</td></tr>
+<tr class="separator:ga3fe2d7c3c80e3186ca78d16a35d5d931"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5910b3964c14e9613e8643a45b09c2d4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga5910b3964c14e9613e8643a45b09c2d4">PSA_ALG_SHA_512_256</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x0100000d)</td></tr>
+<tr class="separator:ga5910b3964c14e9613e8643a45b09c2d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga16f5fe34ccce68c2fada1224c054a999"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga16f5fe34ccce68c2fada1224c054a999">PSA_ALG_SHA3_224</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000010)</td></tr>
+<tr class="separator:ga16f5fe34ccce68c2fada1224c054a999"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaace70d9515489bbe3c5e7ac1b7d9155b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaace70d9515489bbe3c5e7ac1b7d9155b">PSA_ALG_SHA3_256</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000011)</td></tr>
+<tr class="separator:gaace70d9515489bbe3c5e7ac1b7d9155b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab0f079257ea75e2acfe2fc3b38c78cd8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gab0f079257ea75e2acfe2fc3b38c78cd8">PSA_ALG_SHA3_384</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000012)</td></tr>
+<tr class="separator:gab0f079257ea75e2acfe2fc3b38c78cd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga37e5dbe936dddb155e76f2997de27188"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga37e5dbe936dddb155e76f2997de27188">PSA_ALG_SHA3_512</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000013)</td></tr>
+<tr class="separator:ga37e5dbe936dddb155e76f2997de27188"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa1288ea8bd397a8a3f5e19e94110f2e4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa1288ea8bd397a8a3f5e19e94110f2e4">PSA_ALG_ANY_HASH</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x010000ff)</td></tr>
+<tr class="separator:gaa1288ea8bd397a8a3f5e19e94110f2e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gabba3fcfee55533b0e25350e78a942e07"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabba3fcfee55533b0e25350e78a942e07"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_MAC_SUBCATEGORY_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x00c00000)</td></tr>
+<tr class="separator:gabba3fcfee55533b0e25350e78a942e07"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0675192b82720fb8c9037a95bdeb6c88"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0675192b82720fb8c9037a95bdeb6c88"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_HMAC_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x02800000)</td></tr>
+<tr class="separator:ga0675192b82720fb8c9037a95bdeb6c88"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga70f397425684b3efcde1e0e34c28261f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga70f397425684b3efcde1e0e34c28261f">PSA_ALG_HMAC</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_HMAC_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga70f397425684b3efcde1e0e34c28261f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaee84269106a947cb6ac353e15e6c4687"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaee84269106a947cb6ac353e15e6c4687"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_HMAC_GET_HASH</b>(hmac_alg)&#160;&#160;&#160;(PSA_ALG_CATEGORY_HASH | ((hmac_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:gaee84269106a947cb6ac353e15e6c4687"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4a050c3c3cbc6eb96418f18847601c8a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga4a050c3c3cbc6eb96418f18847601c8a">PSA_ALG_IS_HMAC</a>(alg)</td></tr>
+<tr class="separator:ga4a050c3c3cbc6eb96418f18847601c8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8c48784065c65c623a21b9a3ccc56b1d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8c48784065c65c623a21b9a3ccc56b1d"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_MAC_TRUNCATION_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x00003f00)</td></tr>
+<tr class="separator:ga8c48784065c65c623a21b9a3ccc56b1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6db5ce573e6ad52068aba31c3afdce31"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6db5ce573e6ad52068aba31c3afdce31"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_MAC_TRUNCATION_OFFSET</b>&#160;&#160;&#160;8</td></tr>
+<tr class="separator:ga6db5ce573e6ad52068aba31c3afdce31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf36137110baf7bb13c5028fd62c64276"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaf36137110baf7bb13c5028fd62c64276">PSA_ALG_TRUNCATED_MAC</a>(alg,  mac_length)</td></tr>
+<tr class="separator:gaf36137110baf7bb13c5028fd62c64276"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa05a8d99634f3350597ac9284fb70cb1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa05a8d99634f3350597ac9284fb70cb1">PSA_ALG_FULL_LENGTH_MAC</a>(alg)&#160;&#160;&#160;((alg) &amp; ~PSA_ALG_MAC_TRUNCATION_MASK)</td></tr>
+<tr class="separator:gaa05a8d99634f3350597ac9284fb70cb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab03726c4476174e019a08e2a04018ce8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gab03726c4476174e019a08e2a04018ce8">PSA_MAC_TRUNCATED_LENGTH</a>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_MAC_TRUNCATION_MASK) &gt;&gt; PSA_MAC_TRUNCATION_OFFSET)</td></tr>
+<tr class="separator:gab03726c4476174e019a08e2a04018ce8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaee0c29980b08305f6d0e7b3fbb588ade"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaee0c29980b08305f6d0e7b3fbb588ade"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CIPHER_MAC_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x02c00000)</td></tr>
+<tr class="separator:gaee0c29980b08305f6d0e7b3fbb588ade"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga20bdc755de7b90f6621ccb1e6bb5d9e1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga20bdc755de7b90f6621ccb1e6bb5d9e1"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CBC_MAC</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x02c00001)</td></tr>
+<tr class="separator:ga20bdc755de7b90f6621ccb1e6bb5d9e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga146328a1e0023a02464e232d6ecefdc2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga146328a1e0023a02464e232d6ecefdc2"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CMAC</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x02c00002)</td></tr>
+<tr class="separator:ga146328a1e0023a02464e232d6ecefdc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga69a012ce150219a2d97c3ab5582f0004"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga69a012ce150219a2d97c3ab5582f0004"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_GMAC</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x02c00003)</td></tr>
+<tr class="separator:ga69a012ce150219a2d97c3ab5582f0004"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae49d1eb601125d65a5c5b252aa45479e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gae49d1eb601125d65a5c5b252aa45479e">PSA_ALG_IS_BLOCK_CIPHER_MAC</a>(alg)</td></tr>
+<tr class="separator:gae49d1eb601125d65a5c5b252aa45479e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac79618293c4254143caa75f6c5c82fa1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac79618293c4254143caa75f6c5c82fa1"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CIPHER_STREAM_FLAG</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x00800000)</td></tr>
+<tr class="separator:gac79618293c4254143caa75f6c5c82fa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gabc80d19d140032e3b138db4ed37d0bd7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabc80d19d140032e3b138db4ed37d0bd7"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CIPHER_FROM_BLOCK_FLAG</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x00400000)</td></tr>
+<tr class="separator:gabc80d19d140032e3b138db4ed37d0bd7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacfec68e0c6175e02e1b2ebc97df383c0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gacfec68e0c6175e02e1b2ebc97df383c0">PSA_ALG_IS_STREAM_CIPHER</a>(alg)</td></tr>
+<tr class="separator:gacfec68e0c6175e02e1b2ebc97df383c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab6a5284decb0e5e1b5b8740a41ef3c5e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gab6a5284decb0e5e1b5b8740a41ef3c5e">PSA_ALG_ARC4</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04800001)</td></tr>
+<tr class="separator:gab6a5284decb0e5e1b5b8740a41ef3c5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad318309706a769cffdc64e4c7e06b2e9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gad318309706a769cffdc64e4c7e06b2e9">PSA_ALG_CTR</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04c00001)</td></tr>
+<tr class="separator:gad318309706a769cffdc64e4c7e06b2e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0088c933e01d671f263a9a1f177cb5bc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0088c933e01d671f263a9a1f177cb5bc"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CFB</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04c00002)</td></tr>
+<tr class="separator:ga0088c933e01d671f263a9a1f177cb5bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae96bb421fa634c6fa8f571f0112f1ddb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae96bb421fa634c6fa8f571f0112f1ddb"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_OFB</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04c00003)</td></tr>
+<tr class="separator:gae96bb421fa634c6fa8f571f0112f1ddb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa722c0e426a797fd6d99623f59748125"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa722c0e426a797fd6d99623f59748125">PSA_ALG_XTS</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x044000ff)</td></tr>
+<tr class="separator:gaa722c0e426a797fd6d99623f59748125"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacb332d72716958880ee7f97d8365ae66"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gacb332d72716958880ee7f97d8365ae66">PSA_ALG_CBC_NO_PADDING</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04600100)</td></tr>
+<tr class="separator:gacb332d72716958880ee7f97d8365ae66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaef50d2e9716eb6d476046608e4e0c78c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaef50d2e9716eb6d476046608e4e0c78c">PSA_ALG_CBC_PKCS7</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04600101)</td></tr>
+<tr class="separator:gaef50d2e9716eb6d476046608e4e0c78c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac2c0e7d21f1b2df5e76bcb4a8f84273c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac2c0e7d21f1b2df5e76bcb4a8f84273c"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_CCM</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x06001001)</td></tr>
+<tr class="separator:gac2c0e7d21f1b2df5e76bcb4a8f84273c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0d7d02b15aaae490d38277d99f1c637c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0d7d02b15aaae490d38277d99f1c637c"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_GCM</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x06001002)</td></tr>
+<tr class="separator:ga0d7d02b15aaae490d38277d99f1c637c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga575d9082463a06a86c2a22dd63c2e772"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga575d9082463a06a86c2a22dd63c2e772"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_AEAD_TAG_LENGTH_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x00003f00)</td></tr>
+<tr class="separator:ga575d9082463a06a86c2a22dd63c2e772"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga987d416146048906d40dd1d9572e3193"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga987d416146048906d40dd1d9572e3193"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_AEAD_TAG_LENGTH_OFFSET</b>&#160;&#160;&#160;8</td></tr>
+<tr class="separator:ga987d416146048906d40dd1d9572e3193"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa63c520b62ab001d54d28801742fc9db"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa63c520b62ab001d54d28801742fc9db">PSA_ALG_AEAD_WITH_TAG_LENGTH</a>(alg,  tag_length)</td></tr>
+<tr class="separator:gaa63c520b62ab001d54d28801742fc9db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaddea507e062250cda8a29407a9480d2b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaddea507e062250cda8a29407a9480d2b">PSA_ALG_AEAD_WITH_DEFAULT_TAG_LENGTH</a>(alg)</td></tr>
+<tr class="separator:gaddea507e062250cda8a29407a9480d2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6e52012ca3be6acb4c756c372f18c3eb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE</b>(alg,  ref)</td></tr>
+<tr class="separator:ga6e52012ca3be6acb4c756c372f18c3eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga819b23c9899e92e9f867c7b2ae8f264c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga819b23c9899e92e9f867c7b2ae8f264c"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_RSA_PKCS1V15_SIGN_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10020000)</td></tr>
+<tr class="separator:ga819b23c9899e92e9f867c7b2ae8f264c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga702ff75385a6ae7d4247033f479439af"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga702ff75385a6ae7d4247033f479439af">PSA_ALG_RSA_PKCS1V15_SIGN</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_RSA_PKCS1V15_SIGN_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga702ff75385a6ae7d4247033f479439af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4215e2a78dcf834e9a625927faa2a817"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga4215e2a78dcf834e9a625927faa2a817">PSA_ALG_RSA_PKCS1V15_SIGN_RAW</a>&#160;&#160;&#160;PSA_ALG_RSA_PKCS1V15_SIGN_BASE</td></tr>
+<tr class="separator:ga4215e2a78dcf834e9a625927faa2a817"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9d545279f23d43b1b2a744d0dd6826d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9d545279f23d43b1b2a744d0dd6826d0"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_RSA_PKCS1V15_SIGN</b>(alg)&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PKCS1V15_SIGN_BASE)</td></tr>
+<tr class="separator:ga9d545279f23d43b1b2a744d0dd6826d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga49d39a343790971b7a74644f4faea0c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga49d39a343790971b7a74644f4faea0c0"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_RSA_PSS_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10030000)</td></tr>
+<tr class="separator:ga49d39a343790971b7a74644f4faea0c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga62152bf4cb4bf6aace5e1be8f143564d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga62152bf4cb4bf6aace5e1be8f143564d">PSA_ALG_RSA_PSS</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_RSA_PSS_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga62152bf4cb4bf6aace5e1be8f143564d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafa04fae7393a76d5161558768cb82a78"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafa04fae7393a76d5161558768cb82a78"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_RSA_PSS</b>(alg)&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PSS_BASE)</td></tr>
+<tr class="separator:gafa04fae7393a76d5161558768cb82a78"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga863284106894476e3a8524805410b55b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga863284106894476e3a8524805410b55b"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_DSA_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10040000)</td></tr>
+<tr class="separator:ga863284106894476e3a8524805410b55b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9a68efdddff5ae95f104a1416b12742e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga9a68efdddff5ae95f104a1416b12742e">PSA_ALG_DSA</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_DSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga9a68efdddff5ae95f104a1416b12742e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad3800dafc62d6a17bcae4bce98402e68"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad3800dafc62d6a17bcae4bce98402e68"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_DETERMINISTIC_DSA_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10050000)</td></tr>
+<tr class="separator:gad3800dafc62d6a17bcae4bce98402e68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1d2a96f788cce4f8fc156d13342e70de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1d2a96f788cce4f8fc156d13342e70de"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_DSA_DETERMINISTIC_FLAG</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x00010000)</td></tr>
+<tr class="separator:ga1d2a96f788cce4f8fc156d13342e70de"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab8eb98fb6d2e094e47f3b44dfe128f94"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab8eb98fb6d2e094e47f3b44dfe128f94"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_DETERMINISTIC_DSA</b>(hash_alg)&#160;&#160;&#160;(PSA_ALG_DETERMINISTIC_DSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:gab8eb98fb6d2e094e47f3b44dfe128f94"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacfc3cd50ef0c4bf694cf936079bcbaee"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_DSA</b>(alg)</td></tr>
+<tr class="separator:gacfc3cd50ef0c4bf694cf936079bcbaee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae01ae792228c16eac05102f8e900efd1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae01ae792228c16eac05102f8e900efd1"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_DSA_IS_DETERMINISTIC</b>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_DSA_DETERMINISTIC_FLAG) != 0)</td></tr>
+<tr class="separator:gae01ae792228c16eac05102f8e900efd1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga11f7d6fe7a4441143ed398420b7d1980"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga11f7d6fe7a4441143ed398420b7d1980"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_DETERMINISTIC_DSA</b>(alg)&#160;&#160;&#160;(PSA_ALG_IS_DSA(alg) &amp;&amp; PSA_ALG_DSA_IS_DETERMINISTIC(alg))</td></tr>
+<tr class="separator:ga11f7d6fe7a4441143ed398420b7d1980"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga474c0582c4726d0c0274e470f4199cf9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga474c0582c4726d0c0274e470f4199cf9"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_RANDOMIZED_DSA</b>(alg)&#160;&#160;&#160;(PSA_ALG_IS_DSA(alg) &amp;&amp; !PSA_ALG_DSA_IS_DETERMINISTIC(alg))</td></tr>
+<tr class="separator:ga474c0582c4726d0c0274e470f4199cf9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafd9800fdbe6ea881e0ac0ce03d145928"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafd9800fdbe6ea881e0ac0ce03d145928"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_ECDSA_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10060000)</td></tr>
+<tr class="separator:gafd9800fdbe6ea881e0ac0ce03d145928"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7e3ce9f514a227d5ba5d8318870452e3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga7e3ce9f514a227d5ba5d8318870452e3">PSA_ALG_ECDSA</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_ECDSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga7e3ce9f514a227d5ba5d8318870452e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga51d6b6044a62e33cae0cf64bfc3b22a4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga51d6b6044a62e33cae0cf64bfc3b22a4">PSA_ALG_ECDSA_ANY</a>&#160;&#160;&#160;PSA_ALG_ECDSA_BASE</td></tr>
+<tr class="separator:ga51d6b6044a62e33cae0cf64bfc3b22a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6c08b65200140aeb46ee9db9c8ed878c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6c08b65200140aeb46ee9db9c8ed878c"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_DETERMINISTIC_ECDSA_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10070000)</td></tr>
+<tr class="separator:ga6c08b65200140aeb46ee9db9c8ed878c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga11da566bcd341661c8de921e2ca5ed03"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga11da566bcd341661c8de921e2ca5ed03">PSA_ALG_DETERMINISTIC_ECDSA</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_DETERMINISTIC_ECDSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga11da566bcd341661c8de921e2ca5ed03"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafb92dc138c9d2388033ff5fc1dab7b48"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_ECDSA</b>(alg)</td></tr>
+<tr class="separator:gafb92dc138c9d2388033ff5fc1dab7b48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaced29d8e3a1740aaec01e9ef8211df4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaced29d8e3a1740aaec01e9ef8211df4f"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_ECDSA_IS_DETERMINISTIC</b>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_DSA_DETERMINISTIC_FLAG) != 0)</td></tr>
+<tr class="separator:gaced29d8e3a1740aaec01e9ef8211df4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacd8766fe0fb8c1e2d32644e0d092c43a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gacd8766fe0fb8c1e2d32644e0d092c43a"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_DETERMINISTIC_ECDSA</b>(alg)&#160;&#160;&#160;(PSA_ALG_IS_ECDSA(alg) &amp;&amp; PSA_ALG_ECDSA_IS_DETERMINISTIC(alg))</td></tr>
+<tr class="separator:gacd8766fe0fb8c1e2d32644e0d092c43a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae7b0fafebd139f6f815285b7cad622ea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae7b0fafebd139f6f815285b7cad622ea"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_RANDOMIZED_ECDSA</b>(alg)&#160;&#160;&#160;(PSA_ALG_IS_ECDSA(alg) &amp;&amp; !PSA_ALG_ECDSA_IS_DETERMINISTIC(alg))</td></tr>
+<tr class="separator:gae7b0fafebd139f6f815285b7cad622ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad8a8ea0536975363b66410cdeafe38b6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gad8a8ea0536975363b66410cdeafe38b6">PSA_ALG_IS_HASH_AND_SIGN</a>(alg)</td></tr>
+<tr class="separator:gad8a8ea0536975363b66410cdeafe38b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga24cf6d7bcd2b9aeeeff86f07b6c674e3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga24cf6d7bcd2b9aeeeff86f07b6c674e3">PSA_ALG_SIGN_GET_HASH</a>(alg)</td></tr>
+<tr class="separator:ga24cf6d7bcd2b9aeeeff86f07b6c674e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4c540d3abe43fb9abcb94f2bc51acef9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga4c540d3abe43fb9abcb94f2bc51acef9">PSA_ALG_RSA_PKCS1V15_CRYPT</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x12020000)</td></tr>
+<tr class="separator:ga4c540d3abe43fb9abcb94f2bc51acef9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga67ba62fbd154f5d3098866ae68ba66eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga67ba62fbd154f5d3098866ae68ba66eb"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_RSA_OAEP_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x12030000)</td></tr>
+<tr class="separator:ga67ba62fbd154f5d3098866ae68ba66eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa1235dc3fdd9839c6c1b1a9857344c76"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa1235dc3fdd9839c6c1b1a9857344c76">PSA_ALG_RSA_OAEP</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_RSA_OAEP_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:gaa1235dc3fdd9839c6c1b1a9857344c76"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9a85c05fd5c39ca63bbc47fb0755da39"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9a85c05fd5c39ca63bbc47fb0755da39"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_RSA_OAEP</b>(alg)&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_OAEP_BASE)</td></tr>
+<tr class="separator:ga9a85c05fd5c39ca63bbc47fb0755da39"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae6b0b87aabe82a1b3113824f022c52e8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_RSA_OAEP_GET_HASH</b>(alg)</td></tr>
+<tr class="separator:gae6b0b87aabe82a1b3113824f022c52e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga85fe668f95a1e65b573dc5acb798be6f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga85fe668f95a1e65b573dc5acb798be6f"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_HKDF_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x20000100)</td></tr>
+<tr class="separator:ga85fe668f95a1e65b573dc5acb798be6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga32a888fb360e6e25cab8a343772c4a82"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga32a888fb360e6e25cab8a343772c4a82">PSA_ALG_HKDF</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_HKDF_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga32a888fb360e6e25cab8a343772c4a82"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1979d0a76fcee6164cf2e65960f38db2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga1979d0a76fcee6164cf2e65960f38db2">PSA_ALG_IS_HKDF</a>(alg)&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_HKDF_BASE)</td></tr>
+<tr class="separator:ga1979d0a76fcee6164cf2e65960f38db2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga643df48b529b176995927b697ff07a4c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga643df48b529b176995927b697ff07a4c"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_HKDF_GET_HASH</b>(hkdf_alg)&#160;&#160;&#160;(PSA_ALG_CATEGORY_HASH | ((hkdf_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga643df48b529b176995927b697ff07a4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadb328698047e32da8e16551b28b50a35"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gadb328698047e32da8e16551b28b50a35"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_TLS12_PRF_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x20000200)</td></tr>
+<tr class="separator:gadb328698047e32da8e16551b28b50a35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6d5623c2ccda1d4a84e34351af8382d5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga6d5623c2ccda1d4a84e34351af8382d5">PSA_ALG_TLS12_PRF</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_TLS12_PRF_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga6d5623c2ccda1d4a84e34351af8382d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa3c18890c50222e5219f40ade8927e66"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa3c18890c50222e5219f40ade8927e66">PSA_ALG_IS_TLS12_PRF</a>(alg)&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_TLS12_PRF_BASE)</td></tr>
+<tr class="separator:gaa3c18890c50222e5219f40ade8927e66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga403b2695655c7e03d6c07c061c606ab7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga403b2695655c7e03d6c07c061c606ab7"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_TLS12_PRF_GET_HASH</b>(hkdf_alg)&#160;&#160;&#160;(PSA_ALG_CATEGORY_HASH | ((hkdf_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga403b2695655c7e03d6c07c061c606ab7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaaca4b1953a3f31f1a285a48454aa4a6f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaaca4b1953a3f31f1a285a48454aa4a6f"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_TLS12_PSK_TO_MS_BASE</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x20000300)</td></tr>
+<tr class="separator:gaaca4b1953a3f31f1a285a48454aa4a6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga039ec797f15d1635d9b2e09a611f8a68"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga039ec797f15d1635d9b2e09a611f8a68">PSA_ALG_TLS12_PSK_TO_MS</a>(hash_alg)&#160;&#160;&#160;(PSA_ALG_TLS12_PSK_TO_MS_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga039ec797f15d1635d9b2e09a611f8a68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab25ecc074a93fd11069bedfbba5a287b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gab25ecc074a93fd11069bedfbba5a287b">PSA_ALG_IS_TLS12_PSK_TO_MS</a>(alg)&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_TLS12_PSK_TO_MS_BASE)</td></tr>
+<tr class="separator:gab25ecc074a93fd11069bedfbba5a287b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga49f873d8cf9fb0042118e626330eec9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga49f873d8cf9fb0042118e626330eec9d"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_TLS12_PSK_TO_MS_GET_HASH</b>(hkdf_alg)&#160;&#160;&#160;(PSA_ALG_CATEGORY_HASH | ((hkdf_alg) &amp; PSA_ALG_HASH_MASK))</td></tr>
+<tr class="separator:ga49f873d8cf9fb0042118e626330eec9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga914b52f4be62633b3350c5e03bf32ecb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga914b52f4be62633b3350c5e03bf32ecb"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_KEY_DERIVATION_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x080fffff)</td></tr>
+<tr class="separator:ga914b52f4be62633b3350c5e03bf32ecb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad39afc70a46a0ed399e3a1b931fd108b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad39afc70a46a0ed399e3a1b931fd108b"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_KEY_AGREEMENT_MASK</b>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x10f00000)</td></tr>
+<tr class="separator:gad39afc70a46a0ed399e3a1b931fd108b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga78bb81cffb87a635c247725eeb2a2682"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga78bb81cffb87a635c247725eeb2a2682">PSA_ALG_KEY_AGREEMENT</a>(ka_alg,  kdf_alg)&#160;&#160;&#160;((ka_alg) | (kdf_alg))</td></tr>
+<tr class="separator:ga78bb81cffb87a635c247725eeb2a2682"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga56c1189add62b59e8e6a28a809b57037"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga56c1189add62b59e8e6a28a809b57037"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_KEY_AGREEMENT_GET_KDF</b>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_KEY_DERIVATION_MASK) | PSA_ALG_CATEGORY_KEY_DERIVATION)</td></tr>
+<tr class="separator:ga56c1189add62b59e8e6a28a809b57037"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf837c55ba698b488b6e63300e3470abf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf837c55ba698b488b6e63300e3470abf"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_KEY_AGREEMENT_GET_BASE</b>(alg)&#160;&#160;&#160;(((alg) &amp; PSA_ALG_KEY_AGREEMENT_MASK) | PSA_ALG_CATEGORY_KEY_AGREEMENT)</td></tr>
+<tr class="separator:gaf837c55ba698b488b6e63300e3470abf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa40ab362ce141ce541d69b2eb1f41438"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa40ab362ce141ce541d69b2eb1f41438"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_RAW_KEY_AGREEMENT</b>(alg)&#160;&#160;&#160;(PSA_ALG_KEY_AGREEMENT_GET_KDF(alg) == PSA_ALG_CATEGORY_KEY_DERIVATION)</td></tr>
+<tr class="separator:gaa40ab362ce141ce541d69b2eb1f41438"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga14529588c008091de0ad2716170dbd48"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga14529588c008091de0ad2716170dbd48"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PSA_ALG_IS_KEY_DERIVATION_OR_AGREEMENT</b>(alg)&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gaf8b90c648aa53dbd06c236695e300cd0">PSA_ALG_IS_KEY_DERIVATION</a>(alg) || <a class="el" href="group__crypto__types.html#ga59753742cb06553bd22751bbef472b6f">PSA_ALG_IS_KEY_AGREEMENT</a>(alg)))</td></tr>
+<tr class="separator:ga14529588c008091de0ad2716170dbd48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0ebbb6f93a05b6511e6f108ffd2d1eb4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga0ebbb6f93a05b6511e6f108ffd2d1eb4">PSA_ALG_FFDH</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x30100000)</td></tr>
+<tr class="separator:ga0ebbb6f93a05b6511e6f108ffd2d1eb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa3cf76164cd9375af4fb8a291078a19e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gaa3cf76164cd9375af4fb8a291078a19e">PSA_ALG_IS_FFDH</a>(alg)&#160;&#160;&#160;(PSA_ALG_KEY_AGREEMENT_GET_BASE(alg) == <a class="el" href="group__crypto__types.html#ga0ebbb6f93a05b6511e6f108ffd2d1eb4">PSA_ALG_FFDH</a>)</td></tr>
+<tr class="separator:gaa3cf76164cd9375af4fb8a291078a19e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab2dbcf71b63785e7dd7b54a100edee43"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gab2dbcf71b63785e7dd7b54a100edee43">PSA_ALG_ECDH</a>&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x30200000)</td></tr>
+<tr class="separator:gab2dbcf71b63785e7dd7b54a100edee43"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9d9b6533d2a6bea7bac7ae01facb820d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga9d9b6533d2a6bea7bac7ae01facb820d">PSA_ALG_IS_ECDH</a>(alg)&#160;&#160;&#160;(PSA_ALG_KEY_AGREEMENT_GET_BASE(alg) == <a class="el" href="group__crypto__types.html#gab2dbcf71b63785e7dd7b54a100edee43">PSA_ALG_ECDH</a>)</td></tr>
+<tr class="separator:ga9d9b6533d2a6bea7bac7ae01facb820d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacf83d7430e82b97cecb8b26ca6fa1426"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gacf83d7430e82b97cecb8b26ca6fa1426">PSA_ALG_IS_WILDCARD</a>(alg)</td></tr>
+<tr class="separator:gacf83d7430e82b97cecb8b26ca6fa1426"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacf83d7430e82b97cecb8b26ca6fa1426"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gacf83d7430e82b97cecb8b26ca6fa1426">PSA_ALG_IS_WILDCARD</a>(alg)</td></tr>
+<tr class="separator:gacf83d7430e82b97cecb8b26ca6fa1426"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga578159487dfc7096cb191b0d2befe628"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga578159487dfc7096cb191b0d2befe628"></a>
+typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a></td></tr>
+<tr class="memdesc:ga578159487dfc7096cb191b0d2befe628"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encoding of a key type. <br /></td></tr>
+<tr class="separator:ga578159487dfc7096cb191b0d2befe628"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4e8977c145cce5077c4bce7fec890ad9"><td class="memItemLeft" align="right" valign="top">typedef uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a></td></tr>
+<tr class="separator:ga4e8977c145cce5077c4bce7fec890ad9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac2e4d47f1300d73c2f829a6d99252d69"><td class="memItemLeft" align="right" valign="top">typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a></td></tr>
+<tr class="memdesc:gac2e4d47f1300d73c2f829a6d99252d69"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encoding of a cryptographic algorithm.  <a href="#gac2e4d47f1300d73c2f829a6d99252d69">More...</a><br /></td></tr>
+<tr class="separator:gac2e4d47f1300d73c2f829a6d99252d69"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ga6e52012ca3be6acb4c756c372f18c3eb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">ref&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><a class="code" href="group__crypto__types.html#gaa63c520b62ab001d54d28801742fc9db">PSA_ALG_AEAD_WITH_TAG_LENGTH</a>(alg, 0) == <a class="code" href="group__crypto__types.html#gaa63c520b62ab001d54d28801742fc9db">\</a></div><div class="line"><a class="code" href="group__crypto__types.html#gaa63c520b62ab001d54d28801742fc9db">    PSA_ALG_AEAD_WITH_TAG_LENGTH</a>(ref, 0) ?  \</div><div class="line">    ref :</div><div class="ttc" id="group__crypto__types_html_gaa63c520b62ab001d54d28801742fc9db"><div class="ttname"><a href="group__crypto__types.html#gaa63c520b62ab001d54d28801742fc9db">PSA_ALG_AEAD_WITH_TAG_LENGTH</a></div><div class="ttdeci">#define PSA_ALG_AEAD_WITH_TAG_LENGTH(alg, tag_length)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:929</div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="gaddea507e062250cda8a29407a9480d2b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_AEAD_WITH_DEFAULT_TAG_LENGTH</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(                                                                   \</div><div class="line">        PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE(alg, PSA_ALG_CCM)   \</div><div class="line">        PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE(alg, PSA_ALG_GCM)   \</div><div class="line">        0)</div></div><!-- fragment --><p>Calculate the corresponding AEAD algorithm with the default tag length.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An AEAD algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">PSA_ALG_IS_AEAD</a>(<code>alg</code>) is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The corresponding AEAD algorithm with the default tag length for that algorithm. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa63c520b62ab001d54d28801742fc9db"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_AEAD_WITH_TAG_LENGTH</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">tag_length&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(((alg) &amp; ~PSA_ALG_AEAD_TAG_LENGTH_MASK) |                          \</div><div class="line">     ((tag_length) &lt;&lt; PSA_AEAD_TAG_LENGTH_OFFSET &amp;                      \</div><div class="line">      PSA_ALG_AEAD_TAG_LENGTH_MASK))</div></div><!-- fragment --><p>Macro to build a shortened AEAD algorithm.</p>
+<p>A shortened AEAD algorithm is similar to the corresponding AEAD algorithm, but has an authentication tag that consists of fewer bytes. Depending on the algorithm, the tag length may affect the calculation of the ciphertext.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>A AEAD algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a> such that <a class="el" href="group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8">PSA_ALG_IS_AEAD</a>(<code>alg</code>) is true). </td></tr>
+    <tr><td class="paramname">tag_length</td><td>Desired length of the authentication tag in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The corresponding AEAD algorithm with the specified length. </dd>
+<dd>
+Unspecified if <code>alg</code> is not a supported AEAD algorithm or if <code>tag_length</code> is not valid for the specified AEAD algorithm. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa1288ea8bd397a8a3f5e19e94110f2e4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_ANY_HASH&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x010000ff)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Allow any hash algorithm.</p>
+<p>This value may only be used to form the algorithm usage field of a policy for a signature algorithm that is parametrized by a hash. That is, suppose that <code>PSA_xxx_SIGNATURE</code> is one of the following macros:</p><ul>
+<li><a class="el" href="group__crypto__types.html#ga702ff75385a6ae7d4247033f479439af">PSA_ALG_RSA_PKCS1V15_SIGN</a>, <a class="el" href="group__crypto__types.html#ga62152bf4cb4bf6aace5e1be8f143564d">PSA_ALG_RSA_PSS</a>,</li>
+<li><a class="el" href="group__crypto__types.html#ga9a68efdddff5ae95f104a1416b12742e">PSA_ALG_DSA</a>, #PSA_ALG_DETERMINISTIC_DSA,</li>
+<li><a class="el" href="group__crypto__types.html#ga7e3ce9f514a227d5ba5d8318870452e3">PSA_ALG_ECDSA</a>, <a class="el" href="group__crypto__types.html#ga11da566bcd341661c8de921e2ca5ed03">PSA_ALG_DETERMINISTIC_ECDSA</a>. Then you may create a key as follows:</li>
+<li>Set the key usage field using <a class="el" href="group__crypto__types.html#gaa1288ea8bd397a8a3f5e19e94110f2e4">PSA_ALG_ANY_HASH</a>, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_key_policy_set_usage(&amp;policy,</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;                         PSA_KEY_USAGE_SIGN, //or PSA_KEY_USAGE_VERIFY</div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;                         PSA_xxx_SIGNATURE(PSA_ALG_ANY_HASH));</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;psa_set_key_policy(handle, &amp;policy);</div></div><!-- fragment --></li>
+<li>Import or generate key material.</li>
+<li>Call <a class="el" href="group__asymmetric.html#ga1b0db9d345b5048cdd39357ac2d56c07" title="Sign a hash or short message with a private key. ">psa_asymmetric_sign()</a> or <a class="el" href="group__asymmetric.html#ga1b8e964c8d927e3d632325d762959eb7" title="Verify the signature a hash or short message using a public key. ">psa_asymmetric_verify()</a>, passing an algorithm built from <code>PSA_xxx_SIGNATURE</code> and a specific hash. Each call to sign or verify a message may use a different hash. <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_asymmetric_sign(handle, PSA_xxx_SIGNATURE(PSA_ALG_SHA_256), ...);</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;psa_asymmetric_sign(handle, PSA_xxx_SIGNATURE(PSA_ALG_SHA_512), ...);</div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;psa_asymmetric_sign(handle, PSA_xxx_SIGNATURE(PSA_ALG_SHA3_256), ...);</div></div><!-- fragment --></li>
+</ul>
+<p>This value may not be used to build other algorithms that are parametrized over a hash. For any valid use of this macro to build an algorithm <code>\p alg</code>, <a class="el" href="group__crypto__types.html#gad8a8ea0536975363b66410cdeafe38b6">PSA_ALG_IS_HASH_AND_SIGN</a>(<code>alg</code>) is true.</p>
+<p>This value may not be used to build an algorithm specification to perform an operation. It is only valid to build policies. </p>
+
+</div>
+</div>
+<a class="anchor" id="gab6a5284decb0e5e1b5b8740a41ef3c5e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_ARC4&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04800001)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The ARC4 stream cipher algorithm. </p>
+
+</div>
+</div>
+<a class="anchor" id="gacb332d72716958880ee7f97d8365ae66"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_CBC_NO_PADDING&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04600100)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The CBC block cipher chaining mode, with no padding.</p>
+<p>The underlying block cipher is determined by the key type.</p>
+<p>This symmetric cipher mode can only be used with messages whose lengths are whole number of blocks for the chosen block cipher. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaef50d2e9716eb6d476046608e4e0c78c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_CBC_PKCS7&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04600101)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The CBC block cipher chaining mode with PKCS#7 padding.</p>
+<p>The underlying block cipher is determined by the key type.</p>
+<p>This is the padding method defined by PKCS#7 (RFC 2315) &sect;10.3. </p>
+
+</div>
+</div>
+<a class="anchor" id="gad318309706a769cffdc64e4c7e06b2e9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_CTR&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x04c00001)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The CTR stream cipher mode.</p>
+<p>CTR is a stream cipher which is built from a block cipher. The underlying block cipher is determined by the key type. For example, to use AES-128-CTR, use this algorithm with a key of type <a class="el" href="group__crypto__types.html#ga6ee54579dcf278c677eda4bb1a29575e">PSA_KEY_TYPE_AES</a> and a length of 128 bits (16 bytes). </p>
+
+</div>
+</div>
+<a class="anchor" id="ga11da566bcd341661c8de921e2ca5ed03"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_DETERMINISTIC_ECDSA</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">hash_alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(PSA_ALG_DETERMINISTIC_ECDSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Deterministic ECDSA signature with hashing.</p>
+<p>This is the deterministic ECDSA signature scheme defined by RFC 6979.</p>
+<p>The representation of a signature is the same as with <a class="el" href="group__crypto__types.html#ga7e3ce9f514a227d5ba5d8318870452e3">PSA_ALG_ECDSA()</a>.</p>
+<p>Note that when this algorithm is used for verification, signatures made with randomized ECDSA (<a class="el" href="group__crypto__types.html#ga7e3ce9f514a227d5ba5d8318870452e3">PSA_ALG_ECDSA</a>(<code>hash_alg</code>)) with the same private key are accepted. In other words, <a class="el" href="group__crypto__types.html#ga11da566bcd341661c8de921e2ca5ed03">PSA_ALG_DETERMINISTIC_ECDSA</a>(<code>hash_alg</code>) differs from <a class="el" href="group__crypto__types.html#ga7e3ce9f514a227d5ba5d8318870452e3">PSA_ALG_ECDSA</a>(<code>hash_alg</code>) only for signature, not for verification.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">hash_alg</td><td>A hash algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">PSA_ALG_IS_HASH</a>(<code>hash_alg</code>) is true). This includes <a class="el" href="group__crypto__types.html#gaa1288ea8bd397a8a3f5e19e94110f2e4">PSA_ALG_ANY_HASH</a> when specifying the algorithm in a usage policy.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The corresponding deterministic ECDSA signature algorithm. </dd>
+<dd>
+Unspecified if <code>alg</code> is not a supported hash algorithm. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9a68efdddff5ae95f104a1416b12742e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_DSA</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">hash_alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(PSA_ALG_DSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>DSA signature with hashing.</p>
+<p>This is the signature scheme defined by FIPS 186-4, with a random per-message secret number (<em>k</em>).</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">hash_alg</td><td>A hash algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">PSA_ALG_IS_HASH</a>(<code>hash_alg</code>) is true). This includes <a class="el" href="group__crypto__types.html#gaa1288ea8bd397a8a3f5e19e94110f2e4">PSA_ALG_ANY_HASH</a> when specifying the algorithm in a usage policy.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The corresponding DSA signature algorithm. </dd>
+<dd>
+Unspecified if <code>alg</code> is not a supported hash algorithm. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab2dbcf71b63785e7dd7b54a100edee43"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_ECDH&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x30200000)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The elliptic curve Diffie-Hellman (ECDH) key agreement algorithm.</p>
+<p>The shared secret produced by key agreement is the x-coordinate of the shared secret point. It is always <code>ceiling(m / 8)</code> bytes long where <code>m</code> is the bit size associated with the curve, i.e. the bit size of the order of the curve's coordinate field. When <code>m</code> is not a multiple of 8, the byte containing the most significant bit of the shared secret is padded with zero bits. The byte order is either little-endian or big-endian depending on the curve type.</p>
+<ul>
+<li>For Montgomery curves (curve types <code>PSA_ECC_CURVE_CURVEXXX</code>), the shared secret is the x-coordinate of <code>d_A Q_B = d_B Q_A</code> in little-endian byte order. The bit size is 448 for Curve448 and 255 for Curve25519.</li>
+<li>For Weierstrass curves over prime fields (curve types <code>PSA_ECC_CURVE_SECPXXX</code> and <code>PSA_ECC_CURVE_BRAINPOOL_PXXX</code>), the shared secret is the x-coordinate of <code>d_A Q_B = d_B Q_A</code> in big-endian byte order. The bit size is <code>m = ceiling(log_2(p))</code> for the field <code>F_p</code>.</li>
+<li>For Weierstrass curves over binary fields (curve types <code>PSA_ECC_CURVE_SECTXXX</code>), the shared secret is the x-coordinate of <code>d_A Q_B = d_B Q_A</code> in big-endian byte order. The bit size is <code>m</code> for the field <code>F_{2^m}</code>. </li>
+</ul>
+
+</div>
+</div>
+<a class="anchor" id="ga7e3ce9f514a227d5ba5d8318870452e3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_ECDSA</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">hash_alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(PSA_ALG_ECDSA_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>ECDSA signature with hashing.</p>
+<p>This is the ECDSA signature scheme defined by ANSI X9.62, with a random per-message secret number (<em>k</em>).</p>
+<p>The representation of the signature as a byte string consists of the concatentation of the signature values <em>r</em> and <em>s</em>. Each of <em>r</em> and <em>s</em> is encoded as an <em>N</em>-octet string, where <em>N</em> is the length of the base point of the curve in octets. Each value is represented in big-endian order (most significant octet first).</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">hash_alg</td><td>A hash algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">PSA_ALG_IS_HASH</a>(<code>hash_alg</code>) is true). This includes <a class="el" href="group__crypto__types.html#gaa1288ea8bd397a8a3f5e19e94110f2e4">PSA_ALG_ANY_HASH</a> when specifying the algorithm in a usage policy.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The corresponding ECDSA signature algorithm. </dd>
+<dd>
+Unspecified if <code>alg</code> is not a supported hash algorithm. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga51d6b6044a62e33cae0cf64bfc3b22a4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_ECDSA_ANY&#160;&#160;&#160;PSA_ALG_ECDSA_BASE</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>ECDSA signature without hashing.</p>
+<p>This is the same signature scheme as <a class="el" href="group__crypto__types.html#ga7e3ce9f514a227d5ba5d8318870452e3">PSA_ALG_ECDSA()</a>, but without specifying a hash algorithm. This algorithm may only be used to sign or verify a sequence of bytes that should be an already-calculated hash. Note that the input is padded with zeros on the left or truncated on the left as required to fit the curve size. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga0ebbb6f93a05b6511e6f108ffd2d1eb4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_FFDH&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x30100000)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The finite-field Diffie-Hellman (DH) key agreement algorithm.</p>
+<p>The shared secret produced by key agreement and passed as input to the derivation or selection algorithm <code>kdf_alg</code> is the shared secret <code>g^{ab}</code> in big-endian format. It is <code>ceiling(m / 8)</code> bytes long where <code>m</code> is the size of the prime <code>p</code> in bits. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaa05a8d99634f3350597ac9284fb70cb1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_FULL_LENGTH_MAC</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td>&#160;&#160;&#160;((alg) &amp; ~PSA_ALG_MAC_TRUNCATION_MASK)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Macro to build the base MAC algorithm corresponding to a truncated MAC algorithm.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>A MAC algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a> such that <a class="el" href="group__crypto__types.html#gaca7aee4c9dde316b3b1a150a26eab776">PSA_ALG_IS_MAC</a>(<code>alg</code>) is true). This may be a truncated or untruncated MAC algorithm.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The corresponding base MAC algorithm. </dd>
+<dd>
+Unspecified if <code>alg</code> is not a supported MAC algorithm. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga32a888fb360e6e25cab8a343772c4a82"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_HKDF</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">hash_alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(PSA_ALG_HKDF_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Macro to build an HKDF algorithm.</p>
+<p>For example, <code><a class="el" href="group__crypto__types.html#ga32a888fb360e6e25cab8a343772c4a82">PSA_ALG_HKDF(PSA_ALG_SHA256)</a></code> is HKDF using HMAC-SHA-256.</p>
+<p>This key derivation algorithm uses the following inputs:</p><ul>
+<li><a class="el" href="group__derivation.html#ga384777dac55791d8f3a1af72c847b327">PSA_KDF_STEP_SALT</a> is the salt used in the "extract" step. It is optional; if omitted, the derivation uses an empty salt.</li>
+<li><a class="el" href="group__derivation.html#ga90a1995a41e26ed5ca30d2d4641d1168">PSA_KDF_STEP_SECRET</a> is the secret key used in the "extract" step.</li>
+<li><a class="el" href="group__derivation.html#ga836afe760bbda3dafc6c29631560b1a0">PSA_KDF_STEP_INFO</a> is the info string used in the "expand" step. You must pass <a class="el" href="group__derivation.html#ga384777dac55791d8f3a1af72c847b327">PSA_KDF_STEP_SALT</a> before <a class="el" href="group__derivation.html#ga90a1995a41e26ed5ca30d2d4641d1168">PSA_KDF_STEP_SECRET</a>. You may pass <a class="el" href="group__derivation.html#ga836afe760bbda3dafc6c29631560b1a0">PSA_KDF_STEP_INFO</a> at any time after steup and before starting to generate output.</li>
+</ul>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">hash_alg</td><td>A hash algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">PSA_ALG_IS_HASH</a>(<code>hash_alg</code>) is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The corresponding HKDF algorithm. </dd>
+<dd>
+Unspecified if <code>alg</code> is not a supported hash algorithm. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga70f397425684b3efcde1e0e34c28261f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_HMAC</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">hash_alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(PSA_ALG_HMAC_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Macro to build an HMAC algorithm.</p>
+<p>For example, <a class="el" href="group__crypto__types.html#ga70f397425684b3efcde1e0e34c28261f">PSA_ALG_HMAC</a>(<a class="el" href="group__crypto__types.html#ga619471f978e13cdd0a1e37145e4bf341">PSA_ALG_SHA_256</a>) is HMAC-SHA-256.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">hash_alg</td><td>A hash algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">PSA_ALG_IS_HASH</a>(<code>hash_alg</code>) is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The corresponding HMAC algorithm. </dd>
+<dd>
+Unspecified if <code>alg</code> is not a supported hash algorithm. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1d44829d60065eaa4ac9a703e7d6abc8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_AEAD</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_AEAD)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the specified algorithm is an authenticated encryption with associated data (AEAD) algorithm.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is an AEAD algorithm, 0 otherwise. This macro may return either 0 or 1 if <code>alg</code> is not a supported algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga41d2ee937d54efd76bd54a97b2ebc08a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_ASYMMETRIC_ENCRYPTION</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the specified algorithm is a public-key encryption algorithm.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is a public-key encryption algorithm, 0 otherwise. This macro may return either 0 or 1 if <code>alg</code> is not a supported algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae49d1eb601125d65a5c5b252aa45479e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_BLOCK_CIPHER_MAC</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(((alg) &amp; (PSA_ALG_CATEGORY_MASK | PSA_ALG_MAC_SUBCATEGORY_MASK)) == \</div><div class="line">     PSA_ALG_CIPHER_MAC_BASE)</div></div><!-- fragment --><p>Whether the specified algorithm is a MAC algorithm based on a block cipher.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is a MAC algorithm based on a block cipher, 0 otherwise. This macro may return either 0 or 1 if <code>alg</code> is not a supported algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1d1a5a402ad89a2e68f12bfb535490eb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_CIPHER</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_CIPHER)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the specified algorithm is a symmetric cipher algorithm.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is a symmetric cipher algorithm, 0 otherwise. This macro may return either 0 or 1 if <code>alg</code> is not a supported algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gacfc3cd50ef0c4bf694cf936079bcbaee"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_DSA</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(((alg) &amp; ~PSA_ALG_HASH_MASK &amp; ~PSA_ALG_DSA_DETERMINISTIC_FLAG) ==  \</div><div class="line">     PSA_ALG_DSA_BASE)</div></div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="ga9d9b6533d2a6bea7bac7ae01facb820d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_ECDH</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(PSA_ALG_KEY_AGREEMENT_GET_BASE(alg) == <a class="el" href="group__crypto__types.html#gab2dbcf71b63785e7dd7b54a100edee43">PSA_ALG_ECDH</a>)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the specified algorithm is an elliptic curve Diffie-Hellman algorithm.</p>
+<p>This includes every supported key selection or key agreement algorithm for the output of the Diffie-Hellman calculation.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is an elliptic curve Diffie-Hellman algorithm, 0 otherwise. This macro may return either 0 or 1 if <code>alg</code> is not a supported key agreement algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gafb92dc138c9d2388033ff5fc1dab7b48"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_ECDSA</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(((alg) &amp; ~PSA_ALG_HASH_MASK &amp; ~PSA_ALG_DSA_DETERMINISTIC_FLAG) ==  \</div><div class="line">     PSA_ALG_ECDSA_BASE)</div></div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="gaa3cf76164cd9375af4fb8a291078a19e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_FFDH</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(PSA_ALG_KEY_AGREEMENT_GET_BASE(alg) == <a class="el" href="group__crypto__types.html#ga0ebbb6f93a05b6511e6f108ffd2d1eb4">PSA_ALG_FFDH</a>)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the specified algorithm is a finite field Diffie-Hellman algorithm.</p>
+<p>This includes every supported key selection or key agreement algorithm for the output of the Diffie-Hellman calculation.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is a finite field Diffie-Hellman algorithm, 0 otherwise. This macro may return either 0 or 1 if <code>alg</code> is not a supported key agreement algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac9280662bb482590b4b33d1dcd32930f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_HASH</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_HASH)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the specified algorithm is a hash algorithm.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is a hash algorithm, 0 otherwise. This macro may return either 0 or 1 if <code>alg</code> is not a supported algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad8a8ea0536975363b66410cdeafe38b6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_HASH_AND_SIGN</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(PSA_ALG_IS_RSA_PSS(alg) || PSA_ALG_IS_RSA_PKCS1V15_SIGN(alg) ||    \</div><div class="line">     PSA_ALG_IS_DSA(alg) || PSA_ALG_IS_ECDSA(alg))</div></div><!-- fragment --><p>Whether the specified algorithm is a hash-and-sign algorithm.</p>
+<p>Hash-and-sign algorithms are public-key signature algorithms structured in two parts: first the calculation of a hash in a way that does not depend on the key, then the calculation of a signature from the hash value and the key.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is a hash-and-sign algorithm, 0 otherwise. This macro may return either 0 or 1 if <code>alg</code> is not a supported algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1979d0a76fcee6164cf2e65960f38db2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_HKDF</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_HKDF_BASE)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the specified algorithm is an HKDF algorithm.</p>
+<p>HKDF is a family of key derivation algorithms that are based on a hash function and the HMAC construction.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is an HKDF algorithm, 0 otherwise. This macro may return either 0 or 1 if <code>alg</code> is not a supported key derivation algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4a050c3c3cbc6eb96418f18847601c8a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_HMAC</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(((alg) &amp; (PSA_ALG_CATEGORY_MASK | PSA_ALG_MAC_SUBCATEGORY_MASK)) == \</div><div class="line">     PSA_ALG_HMAC_BASE)</div></div><!-- fragment --><p>Whether the specified algorithm is an HMAC algorithm.</p>
+<p>HMAC is a family of MAC algorithms that are based on a hash function.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is an HMAC algorithm, 0 otherwise. This macro may return either 0 or 1 if <code>alg</code> is not a supported algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga59753742cb06553bd22751bbef472b6f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_KEY_AGREEMENT</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(((alg) &amp; PSA_ALG_CATEGORY_MASK &amp; ~PSA_ALG_KEY_SELECTION_FLAG) ==   \</div><div class="line">     PSA_ALG_CATEGORY_KEY_AGREEMENT)</div></div><!-- fragment --><p>Whether the specified algorithm is a key agreement algorithm.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is a key agreement algorithm, 0 otherwise. This macro may return either 0 or 1 if <code>alg</code> is not a supported algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf8b90c648aa53dbd06c236695e300cd0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_KEY_DERIVATION</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_KEY_DERIVATION)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the specified algorithm is a key derivation algorithm.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is a key derivation algorithm, 0 otherwise. This macro may return either 0 or 1 if <code>alg</code> is not a supported algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga51b1834ee5e98c6a83c2cfc7699f9077"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_KEY_SELECTION</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_KEY_SELECTION)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the specified algorithm is a key selection algorithm.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is a key selection algorithm, 0 otherwise. This macro may return either 0 or 1 if <code>alg</code> is not a supported algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaca7aee4c9dde316b3b1a150a26eab776"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_MAC</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_MAC)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the specified algorithm is a MAC algorithm.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is a MAC algorithm, 0 otherwise. This macro may return either 0 or 1 if <code>alg</code> is not a supported algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6d490d0904e0698f6c1268a89d72ff31"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_SIGN</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(((alg) &amp; PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_SIGN)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the specified algorithm is a public-key signature algorithm.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is a public-key signature algorithm, 0 otherwise. This macro may return either 0 or 1 if <code>alg</code> is not a supported algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gacfec68e0c6175e02e1b2ebc97df383c0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_STREAM_CIPHER</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(((alg) &amp; (PSA_ALG_CATEGORY_MASK | PSA_ALG_CIPHER_STREAM_FLAG)) == \</div><div class="line">        (PSA_ALG_CATEGORY_CIPHER | PSA_ALG_CIPHER_STREAM_FLAG))</div></div><!-- fragment --><p>Whether the specified algorithm is a stream cipher.</p>
+<p>A stream cipher is a symmetric cipher that encrypts or decrypts messages by applying a bitwise-xor with a stream of bytes that is generated from a key.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is a stream cipher algorithm, 0 otherwise. This macro may return either 0 or 1 if <code>alg</code> is not a supported algorithm identifier or if it is not a symmetric cipher algorithm. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa3c18890c50222e5219f40ade8927e66"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_TLS12_PRF</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_TLS12_PRF_BASE)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the specified algorithm is a TLS-1.2 PRF algorithm.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is a TLS-1.2 PRF algorithm, 0 otherwise. This macro may return either 0 or 1 if <code>alg</code> is not a supported key derivation algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab25ecc074a93fd11069bedfbba5a287b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_TLS12_PSK_TO_MS</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(((alg) &amp; ~PSA_ALG_HASH_MASK) == PSA_ALG_TLS12_PSK_TO_MS_BASE)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the specified algorithm is a TLS-1.2 PSK to MS algorithm.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is a TLS-1.2 PSK to MS algorithm, 0 otherwise. This macro may return either 0 or 1 if <code>alg</code> is not a supported key derivation algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gacf83d7430e82b97cecb8b26ca6fa1426"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_WILDCARD</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(<a class="code" href="group__crypto__types.html#gad8a8ea0536975363b66410cdeafe38b6">PSA_ALG_IS_HASH_AND_SIGN</a>(alg) ?                    <a class="code" href="group__crypto__types.html#ga24cf6d7bcd2b9aeeeff86f07b6c674e3">\</a></div><div class="line"><a class="code" href="group__crypto__types.html#ga24cf6d7bcd2b9aeeeff86f07b6c674e3">     PSA_ALG_SIGN_GET_HASH</a>(alg) == <a class="code" href="group__crypto__types.html#gaa1288ea8bd397a8a3f5e19e94110f2e4">PSA_ALG_ANY_HASH</a> :   \</div><div class="line">     (alg) == <a class="code" href="group__crypto__types.html#gaa1288ea8bd397a8a3f5e19e94110f2e4">PSA_ALG_ANY_HASH</a>)</div><div class="ttc" id="group__crypto__types_html_gaa1288ea8bd397a8a3f5e19e94110f2e4"><div class="ttname"><a href="group__crypto__types.html#gaa1288ea8bd397a8a3f5e19e94110f2e4">PSA_ALG_ANY_HASH</a></div><div class="ttdeci">#define PSA_ALG_ANY_HASH</div><div class="ttdef"><b>Definition:</b> crypto_values.h:712</div></div>
+<div class="ttc" id="group__crypto__types_html_ga24cf6d7bcd2b9aeeeff86f07b6c674e3"><div class="ttname"><a href="group__crypto__types.html#ga24cf6d7bcd2b9aeeeff86f07b6c674e3">PSA_ALG_SIGN_GET_HASH</a></div><div class="ttdeci">#define PSA_ALG_SIGN_GET_HASH(alg)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:1138</div></div>
+<div class="ttc" id="group__crypto__types_html_gad8a8ea0536975363b66410cdeafe38b6"><div class="ttname"><a href="group__crypto__types.html#gad8a8ea0536975363b66410cdeafe38b6">PSA_ALG_IS_HASH_AND_SIGN</a></div><div class="ttdeci">#define PSA_ALG_IS_HASH_AND_SIGN(alg)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:1116</div></div>
+</div><!-- fragment --><p>Whether the specified algorithm encoding is a wildcard.</p>
+<p>Wildcard values may only be used to set the usage algorithm field in a policy, not to perform an operation.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is a wildcard algorithm encoding. </dd>
+<dd>
+0 if <code>alg</code> is a non-wildcard algorithm encoding (suitable for an operation). </dd>
+<dd>
+This macro may return either 0 or 1 if <code>alg</code> is not a supported algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gacf83d7430e82b97cecb8b26ca6fa1426"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_IS_WILDCARD</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(<a class="code" href="group__crypto__types.html#gad8a8ea0536975363b66410cdeafe38b6">PSA_ALG_IS_HASH_AND_SIGN</a>(alg) ?                    <a class="code" href="group__crypto__types.html#ga24cf6d7bcd2b9aeeeff86f07b6c674e3">\</a></div><div class="line"><a class="code" href="group__crypto__types.html#ga24cf6d7bcd2b9aeeeff86f07b6c674e3">     PSA_ALG_SIGN_GET_HASH</a>(alg) == <a class="code" href="group__crypto__types.html#gaa1288ea8bd397a8a3f5e19e94110f2e4">PSA_ALG_ANY_HASH</a> :   \</div><div class="line">     (alg) == <a class="code" href="group__crypto__types.html#gaa1288ea8bd397a8a3f5e19e94110f2e4">PSA_ALG_ANY_HASH</a>)</div><div class="ttc" id="group__crypto__types_html_gaa1288ea8bd397a8a3f5e19e94110f2e4"><div class="ttname"><a href="group__crypto__types.html#gaa1288ea8bd397a8a3f5e19e94110f2e4">PSA_ALG_ANY_HASH</a></div><div class="ttdeci">#define PSA_ALG_ANY_HASH</div><div class="ttdef"><b>Definition:</b> crypto_values.h:712</div></div>
+<div class="ttc" id="group__crypto__types_html_ga24cf6d7bcd2b9aeeeff86f07b6c674e3"><div class="ttname"><a href="group__crypto__types.html#ga24cf6d7bcd2b9aeeeff86f07b6c674e3">PSA_ALG_SIGN_GET_HASH</a></div><div class="ttdeci">#define PSA_ALG_SIGN_GET_HASH(alg)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:1138</div></div>
+<div class="ttc" id="group__crypto__types_html_gad8a8ea0536975363b66410cdeafe38b6"><div class="ttname"><a href="group__crypto__types.html#gad8a8ea0536975363b66410cdeafe38b6">PSA_ALG_IS_HASH_AND_SIGN</a></div><div class="ttdeci">#define PSA_ALG_IS_HASH_AND_SIGN(alg)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:1116</div></div>
+</div><!-- fragment --><p>Whether the specified algorithm encoding is a wildcard.</p>
+<p>Wildcard values may only be used to set the usage algorithm field in a policy, not to perform an operation.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>An algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>alg</code> is a wildcard algorithm encoding. </dd>
+<dd>
+0 if <code>alg</code> is a non-wildcard algorithm encoding (suitable for an operation). </dd>
+<dd>
+This macro may return either 0 or 1 if <code>alg</code> is not a supported algorithm identifier. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga78bb81cffb87a635c247725eeb2a2682"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_KEY_AGREEMENT</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">ka_alg, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">kdf_alg&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td>&#160;&#160;&#160;((ka_alg) | (kdf_alg))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Macro to build a combined algorithm that chains a key agreement with a key derivation.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ka_alg</td><td>A key agreement algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#ga59753742cb06553bd22751bbef472b6f">PSA_ALG_IS_KEY_AGREEMENT</a>(<code>ka_alg</code>) is true). </td></tr>
+    <tr><td class="paramname">kdf_alg</td><td>A key derivation algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gaf8b90c648aa53dbd06c236695e300cd0">PSA_ALG_IS_KEY_DERIVATION</a>(<code>kdf_alg</code>) is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The corresponding key agreement and derivation algorithm. </dd>
+<dd>
+Unspecified if <code>ka_alg</code> is not a supported key agreement algorithm or <code>kdf_alg</code> is not a supported key derivation algorithm. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa1235dc3fdd9839c6c1b1a9857344c76"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_RSA_OAEP</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">hash_alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(PSA_ALG_RSA_OAEP_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>RSA OAEP encryption.</p>
+<p>This is the encryption scheme defined by RFC 8017 (PKCS#1: RSA Cryptography Specifications) under the name RSAES-OAEP, with the message generation function MGF1.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">hash_alg</td><td>The hash algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">PSA_ALG_IS_HASH</a>(<code>hash_alg</code>) is true) to use for MGF1.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The corresponding RSA OAEP signature algorithm. </dd>
+<dd>
+Unspecified if <code>alg</code> is not a supported hash algorithm. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae6b0b87aabe82a1b3113824f022c52e8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_RSA_OAEP_GET_HASH</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(PSA_ALG_IS_RSA_OAEP(alg) ?                                 \</div><div class="line">     ((alg) &amp; PSA_ALG_HASH_MASK) | PSA_ALG_CATEGORY_HASH :      \</div><div class="line">     0)</div></div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="ga4c540d3abe43fb9abcb94f2bc51acef9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_RSA_PKCS1V15_CRYPT&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x12020000)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>RSA PKCS#1 v1.5 encryption. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga702ff75385a6ae7d4247033f479439af"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_RSA_PKCS1V15_SIGN</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">hash_alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(PSA_ALG_RSA_PKCS1V15_SIGN_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>RSA PKCS#1 v1.5 signature with hashing.</p>
+<p>This is the signature scheme defined by RFC 8017 (PKCS#1: RSA Cryptography Specifications) under the name RSASSA-PKCS1-v1_5.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">hash_alg</td><td>A hash algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">PSA_ALG_IS_HASH</a>(<code>hash_alg</code>) is true). This includes <a class="el" href="group__crypto__types.html#gaa1288ea8bd397a8a3f5e19e94110f2e4">PSA_ALG_ANY_HASH</a> when specifying the algorithm in a usage policy.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The corresponding RSA PKCS#1 v1.5 signature algorithm. </dd>
+<dd>
+Unspecified if <code>alg</code> is not a supported hash algorithm. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4215e2a78dcf834e9a625927faa2a817"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_RSA_PKCS1V15_SIGN_RAW&#160;&#160;&#160;PSA_ALG_RSA_PKCS1V15_SIGN_BASE</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Raw PKCS#1 v1.5 signature.</p>
+<p>The input to this algorithm is the DigestInfo structure used by RFC 8017 (PKCS#1: RSA Cryptography Specifications), &sect;9.2 steps 3&ndash;6. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga62152bf4cb4bf6aace5e1be8f143564d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_RSA_PSS</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">hash_alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(PSA_ALG_RSA_PSS_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>RSA PSS signature with hashing.</p>
+<p>This is the signature scheme defined by RFC 8017 (PKCS#1: RSA Cryptography Specifications) under the name RSASSA-PSS, with the message generation function MGF1, and with a salt length equal to the length of the hash. The specified hash algorithm is used to hash the input message, to create the salted hash, and for the mask generation.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">hash_alg</td><td>A hash algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">PSA_ALG_IS_HASH</a>(<code>hash_alg</code>) is true). This includes <a class="el" href="group__crypto__types.html#gaa1288ea8bd397a8a3f5e19e94110f2e4">PSA_ALG_ANY_HASH</a> when specifying the algorithm in a usage policy.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The corresponding RSA PSS signature algorithm. </dd>
+<dd>
+Unspecified if <code>alg</code> is not a supported hash algorithm. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga16f5fe34ccce68c2fada1224c054a999"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_SHA3_224&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000010)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>SHA3-224 </p>
+
+</div>
+</div>
+<a class="anchor" id="gaace70d9515489bbe3c5e7ac1b7d9155b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_SHA3_256&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000011)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>SHA3-256 </p>
+
+</div>
+</div>
+<a class="anchor" id="gab0f079257ea75e2acfe2fc3b38c78cd8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_SHA3_384&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000012)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>SHA3-384 </p>
+
+</div>
+</div>
+<a class="anchor" id="ga37e5dbe936dddb155e76f2997de27188"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_SHA3_512&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000013)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>SHA3-512 </p>
+
+</div>
+</div>
+<a class="anchor" id="ga25d6a3244d10a7148fe6b026d1979f7b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_SHA_224&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000008)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>SHA2-224 </p>
+
+</div>
+</div>
+<a class="anchor" id="ga619471f978e13cdd0a1e37145e4bf341"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_SHA_256&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x01000009)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>SHA2-256 </p>
+
+</div>
+</div>
+<a class="anchor" id="ga58af64dd9a86a287e8da9ed7739eead4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_SHA_384&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x0100000a)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>SHA2-384 </p>
+
+</div>
+</div>
+<a class="anchor" id="gafba3ae409f46d3dd7f37a0910660c3e9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_SHA_512&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x0100000b)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>SHA2-512 </p>
+
+</div>
+</div>
+<a class="anchor" id="ga3fe2d7c3c80e3186ca78d16a35d5d931"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_SHA_512_224&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x0100000c)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>SHA2-512/224 </p>
+
+</div>
+</div>
+<a class="anchor" id="ga5910b3964c14e9613e8643a45b09c2d4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_SHA_512_256&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x0100000d)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>SHA2-512/256 </p>
+
+</div>
+</div>
+<a class="anchor" id="ga24cf6d7bcd2b9aeeeff86f07b6c674e3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_SIGN_GET_HASH</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(<a class="code" href="group__crypto__types.html#gad8a8ea0536975363b66410cdeafe38b6">PSA_ALG_IS_HASH_AND_SIGN</a>(alg) ?                                   \</div><div class="line">     ((alg) &amp; PSA_ALG_HASH_MASK) == 0 ? <span class="comment">/*&quot;raw&quot; algorithm*/</span> 0 :        \</div><div class="line">     ((alg) &amp; PSA_ALG_HASH_MASK) | PSA_ALG_CATEGORY_HASH :             \</div><div class="line">     0)</div><div class="ttc" id="group__crypto__types_html_gad8a8ea0536975363b66410cdeafe38b6"><div class="ttname"><a href="group__crypto__types.html#gad8a8ea0536975363b66410cdeafe38b6">PSA_ALG_IS_HASH_AND_SIGN</a></div><div class="ttdeci">#define PSA_ALG_IS_HASH_AND_SIGN(alg)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:1116</div></div>
+</div><!-- fragment --><p>Get the hash used by a hash-and-sign signature algorithm.</p>
+<p>A hash-and-sign algorithm is a signature algorithm which is composed of two phases: first a hashing phase which does not use the key and produces a hash of the input message, then a signing phase which only uses the hash and the key and not the message itself.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>A signature algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#ga6d490d0904e0698f6c1268a89d72ff31">PSA_ALG_IS_SIGN</a>(<code>alg</code>) is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The underlying hash algorithm if <code>alg</code> is a hash-and-sign algorithm. </dd>
+<dd>
+0 if <code>alg</code> is a signature algorithm that does not follow the hash-and-sign structure. </dd>
+<dd>
+Unspecified if <code>alg</code> is not a signature algorithm or if it is not supported by the implementation. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6d5623c2ccda1d4a84e34351af8382d5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_TLS12_PRF</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">hash_alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(PSA_ALG_TLS12_PRF_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Macro to build a TLS-1.2 PRF algorithm.</p>
+<p>TLS 1.2 uses a custom pseudorandom function (PRF) for key schedule, specified in Section 5 of RFC 5246. It is based on HMAC and can be used with either SHA-256 or SHA-384.</p>
+<p>For the application to TLS-1.2, the salt and label arguments passed to psa_key_derivation() are what's called 'seed' and 'label' in RFC 5246, respectively. For example, for TLS key expansion, the salt is the concatenation of ServerHello.Random + ClientHello.Random, while the label is "key expansion".</p>
+<p>For example, <code><a class="el" href="group__crypto__types.html#ga6d5623c2ccda1d4a84e34351af8382d5">PSA_ALG_TLS12_PRF(PSA_ALG_SHA256)</a></code> represents the TLS 1.2 PRF using HMAC-SHA-256.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">hash_alg</td><td>A hash algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">PSA_ALG_IS_HASH</a>(<code>hash_alg</code>) is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The corresponding TLS-1.2 PRF algorithm. </dd>
+<dd>
+Unspecified if <code>alg</code> is not a supported hash algorithm. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga039ec797f15d1635d9b2e09a611f8a68"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_TLS12_PSK_TO_MS</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">hash_alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(PSA_ALG_TLS12_PSK_TO_MS_BASE | ((hash_alg) &amp; PSA_ALG_HASH_MASK))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Macro to build a TLS-1.2 PSK-to-MasterSecret algorithm.</p>
+<p>In a pure-PSK handshake in TLS 1.2, the master secret is derived from the PreSharedKey (PSK) through the application of padding (RFC 4279, Section 2) and the TLS-1.2 PRF (RFC 5246, Section 5). The latter is based on HMAC and can be used with either SHA-256 or SHA-384.</p>
+<p>For the application to TLS-1.2, the salt passed to psa_key_derivation() (and forwarded to the TLS-1.2 PRF) is the concatenation of the ClientHello.Random + ServerHello.Random, while the label is "master secret" or "extended master secret".</p>
+<p>For example, <code><a class="el" href="group__crypto__types.html#ga039ec797f15d1635d9b2e09a611f8a68">PSA_ALG_TLS12_PSK_TO_MS(PSA_ALG_SHA256)</a></code> represents the TLS-1.2 PSK to MasterSecret derivation PRF using HMAC-SHA-256.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">hash_alg</td><td>A hash algorithm (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">PSA_ALG_IS_HASH</a>(<code>hash_alg</code>) is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The corresponding TLS-1.2 PSK to MS algorithm. </dd>
+<dd>
+Unspecified if <code>alg</code> is not a supported hash algorithm. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf36137110baf7bb13c5028fd62c64276"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_TRUNCATED_MAC</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">mac_length&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(((alg) &amp; ~PSA_ALG_MAC_TRUNCATION_MASK) |                           \</div><div class="line">     ((mac_length) &lt;&lt; PSA_MAC_TRUNCATION_OFFSET &amp; PSA_ALG_MAC_TRUNCATION_MASK))</div></div><!-- fragment --><p>Macro to build a truncated MAC algorithm.</p>
+<p>A truncated MAC algorithm is identical to the corresponding MAC algorithm except that the MAC value for the truncated algorithm consists of only the first <code>mac_length</code> bytes of the MAC value for the untruncated algorithm.</p>
+<dl class="section note"><dt>Note</dt><dd>This macro may allow constructing algorithm identifiers that are not valid, either because the specified length is larger than the untruncated MAC or because the specified length is smaller than permitted by the implementation.</dd>
+<dd>
+It is implementation-defined whether a truncated MAC that is truncated to the same length as the MAC of the untruncated algorithm is considered identical to the untruncated algorithm for policy comparison purposes.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>A MAC algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a> such that <a class="el" href="group__crypto__types.html#gaca7aee4c9dde316b3b1a150a26eab776">PSA_ALG_IS_MAC</a>(<code>alg</code>) is true). This may be a truncated or untruncated MAC algorithm. </td></tr>
+    <tr><td class="paramname">mac_length</td><td>Desired length of the truncated MAC in bytes. This must be at most the full length of the MAC and must be at least an implementation-specified minimum. The implementation-specified minimum shall not be zero.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The corresponding MAC algorithm with the specified length. </dd>
+<dd>
+Unspecified if <code>alg</code> is not a supported MAC algorithm or if <code>mac_length</code> is too small or too large for the specified MAC algorithm. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa722c0e426a797fd6d99623f59748125"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ALG_XTS&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>)0x044000ff)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The XTS cipher mode.</p>
+<p>XTS is a cipher mode which is built from a block cipher. It requires at least one full block of input, but beyond this minimum the input does not need to be a whole number of blocks. </p>
+
+</div>
+</div>
+<a class="anchor" id="gacaa366bdeb0413e63e87a667c5457b2e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_BLOCK_CIPHER_BLOCK_SIZE</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">type</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(                                                \</div><div class="line">        (type) == <a class="code" href="group__crypto__types.html#ga6ee54579dcf278c677eda4bb1a29575e">PSA_KEY_TYPE_AES</a> ? 16 :            \</div><div class="line">        (type) == <a class="code" href="group__crypto__types.html#ga577562bfbbc691c820d55ec308333138">PSA_KEY_TYPE_DES</a> ? 8 :             \</div><div class="line">        (type) == <a class="code" href="group__crypto__types.html#gad8e5da742343fd5519f9d8a630c2ed81">PSA_KEY_TYPE_CAMELLIA</a> ? 16 :       \</div><div class="line">        (type) == <a class="code" href="group__crypto__types.html#gae4d46e83f910dcaa126000a8ed03cde9">PSA_KEY_TYPE_ARC4</a> ? 1 :            \</div><div class="line">        0)</div><div class="ttc" id="group__crypto__types_html_ga577562bfbbc691c820d55ec308333138"><div class="ttname"><a href="group__crypto__types.html#ga577562bfbbc691c820d55ec308333138">PSA_KEY_TYPE_DES</a></div><div class="ttdeci">#define PSA_KEY_TYPE_DES</div><div class="ttdef"><b>Definition:</b> crypto_values.h:407</div></div>
+<div class="ttc" id="group__crypto__types_html_gad8e5da742343fd5519f9d8a630c2ed81"><div class="ttname"><a href="group__crypto__types.html#gad8e5da742343fd5519f9d8a630c2ed81">PSA_KEY_TYPE_CAMELLIA</a></div><div class="ttdeci">#define PSA_KEY_TYPE_CAMELLIA</div><div class="ttdef"><b>Definition:</b> crypto_values.h:411</div></div>
+<div class="ttc" id="group__crypto__types_html_ga6ee54579dcf278c677eda4bb1a29575e"><div class="ttname"><a href="group__crypto__types.html#ga6ee54579dcf278c677eda4bb1a29575e">PSA_KEY_TYPE_AES</a></div><div class="ttdeci">#define PSA_KEY_TYPE_AES</div><div class="ttdef"><b>Definition:</b> crypto_values.h:396</div></div>
+<div class="ttc" id="group__crypto__types_html_gae4d46e83f910dcaa126000a8ed03cde9"><div class="ttname"><a href="group__crypto__types.html#gae4d46e83f910dcaa126000a8ed03cde9">PSA_KEY_TYPE_ARC4</a></div><div class="ttdeci">#define PSA_KEY_TYPE_ARC4</div><div class="ttdef"><b>Definition:</b> crypto_values.h:417</div></div>
+</div><!-- fragment --><p>The block size of a block cipher.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">type</td><td>A cipher key type (value of type <a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628" title="Encoding of a key type. ">psa_key_type_t</a>).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The block size for a block cipher, or 1 for a stream cipher. The return value is undefined if <code>type</code> is not a supported cipher key type.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>It is possible to build stream cipher algorithms on top of a block cipher, for example CTR mode (<a class="el" href="group__crypto__types.html#gad318309706a769cffdc64e4c7e06b2e9">PSA_ALG_CTR</a>). This macro only takes the key type into account, so it cannot be used to determine the size of the data that <a class="el" href="group__cipher.html#gafd0caea99cf1052527e4089d37f5ab91">psa_cipher_update()</a> might buffer for future processing in general.</dd>
+<dd>
+This macro returns a compile-time constant if its argument is one.</dd></dl>
+<dl class="section warning"><dt>Warning</dt><dd>This macro may evaluate its argument multiple times. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6ee54579dcf278c677eda4bb1a29575e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_AES&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000001)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Key for an cipher, AEAD or MAC algorithm based on the AES block cipher.</p>
+<p>The size of the key can be 16 bytes (AES-128), 24 bytes (AES-192) or 32 bytes (AES-256). </p>
+
+</div>
+</div>
+<a class="anchor" id="gae4d46e83f910dcaa126000a8ed03cde9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_ARC4&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000004)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Key for the RC4 stream cipher.</p>
+<p>Note that RC4 is weak and deprecated and should only be used in legacy protocols. </p>
+
+</div>
+</div>
+<a class="anchor" id="gad8e5da742343fd5519f9d8a630c2ed81"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_CAMELLIA&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000003)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Key for an cipher, AEAD or MAC algorithm based on the Camellia block cipher. </p>
+
+</div>
+</div>
+<a class="anchor" id="gae871b2357b8593f33bfd51abbf93ebb1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_DERIVE&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x52000000)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>A secret for key derivation.</p>
+<p>The key policy determines which key derivation algorithm the key can be used for. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga577562bfbbc691c820d55ec308333138"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_DES&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x40000002)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Key for a cipher or MAC algorithm based on DES or 3DES (Triple-DES).</p>
+<p>The size of the key can be 8 bytes (single DES), 16 bytes (2-key 3DES) or 24 bytes (3-key 3DES).</p>
+<p>Note that single DES and 2-key 3DES are weak and strongly deprecated and should only be used to decrypt legacy data. 3-key 3DES is weak and deprecated and should only be used in legacy protocols. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga39b63c6b97a62a316c0660bf72b2fdd5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_DH_KEYPAIR&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70040000)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Diffie-Hellman key exchange key pair (private and public key). </p>
+
+</div>
+</div>
+<a class="anchor" id="ga325a340d7c72d99d3a678eb210bf6e0a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_DH_PUBLIC_KEY&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x60040000)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Diffie-Hellman key exchange public key. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga011010ee28c20388f3d89fb27088ed62"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_DSA_KEYPAIR&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70020000)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>DSA key pair (private and public key). </p>
+
+</div>
+</div>
+<a class="anchor" id="ga5e7439c2905136366c3a876e62e5ddfc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_DSA_PUBLIC_KEY&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x60020000)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>DSA public key. </p>
+
+</div>
+</div>
+<a class="anchor" id="gadf3ad65d157bf5282849c954bf3f51af"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_ECC_KEYPAIR</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">curve</td><td>)</td>
+          <td>&#160;&#160;&#160;(PSA_KEY_TYPE_ECC_KEYPAIR_BASE | (curve))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Elliptic curve key pair. </p>
+
+</div>
+</div>
+<a class="anchor" id="gad54c03d3b47020e571a72cd01d978cf2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_ECC_PUBLIC_KEY</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">curve</td><td>)</td>
+          <td>&#160;&#160;&#160;(PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE | (curve))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Elliptic curve public key. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga0c567210e6f80aa8f2aa87efa7a3a3f9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_GET_CURVE</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">type</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">((<a class="code" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a>) (<a class="code" href="group__crypto__types.html#ga88e01fa06b585654689a99bcc06bbe66">PSA_KEY_TYPE_IS_ECC</a>(type) ?              \</div><div class="line">                        ((type) &amp; PSA_KEY_TYPE_ECC_CURVE_MASK) : \</div><div class="line">                        0))</div><div class="ttc" id="group__crypto__types_html_ga4e8977c145cce5077c4bce7fec890ad9"><div class="ttname"><a href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a></div><div class="ttdeci">uint16_t psa_ecc_curve_t</div><div class="ttdef"><b>Definition:</b> crypto_types.h:64</div></div>
+<div class="ttc" id="group__crypto__types_html_ga88e01fa06b585654689a99bcc06bbe66"><div class="ttname"><a href="group__crypto__types.html#ga88e01fa06b585654689a99bcc06bbe66">PSA_KEY_TYPE_IS_ECC</a></div><div class="ttdeci">#define PSA_KEY_TYPE_IS_ECC(type)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:446</div></div>
+</div><!-- fragment --><p>Extract the curve from an elliptic curve key type. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga92d989f4ca64abd00f463defd773a6f8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_HMAC&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x51000000)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>HMAC key.</p>
+<p>The key policy determines which underlying hash algorithm the key can be used for.</p>
+<p>HMAC keys should generally have the same size as the underlying hash. This size can be calculated with <a class="el" href="crypto__sizes_8h.html#aef340331ce3cba2b57e1fc5624bf1f99">PSA_HASH_SIZE</a>(<code>alg</code>) where <code>alg</code> is the HMAC algorithm or the underlying hash algorithm. </p>
+
+</div>
+</div>
+<a class="anchor" id="gab138ae2ebf2905dfbaf4154db2620939"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_IS_ASYMMETRIC</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">type</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(((type) &amp; PSA_KEY_TYPE_CATEGORY_MASK                               \</div><div class="line">      &amp; ~PSA_KEY_TYPE_CATEGORY_FLAG_PAIR) ==                            \</div><div class="line">     PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY)</div></div><!-- fragment --><p>Whether a key type is asymmetric: either a key pair or a public key. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga248ae35c0e2becaebbf479fc1c3a3b0e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_IS_DH</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">type</td><td>)</td>
+          <td>&#160;&#160;&#160;(<a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a>(type) == <a class="el" href="group__crypto__types.html#ga325a340d7c72d99d3a678eb210bf6e0a">PSA_KEY_TYPE_DH_PUBLIC_KEY</a>)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether a key type is a Diffie-Hellman key exchange key (pair or public-only). </p>
+
+</div>
+</div>
+<a class="anchor" id="ga273fdfcf23eb0624f8b63d2321cf95c1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_IS_DSA</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">type</td><td>)</td>
+          <td>&#160;&#160;&#160;(<a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a>(type) == <a class="el" href="group__crypto__types.html#ga5e7439c2905136366c3a876e62e5ddfc">PSA_KEY_TYPE_DSA_PUBLIC_KEY</a>)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether a key type is an DSA key (pair or public-only). </p>
+
+</div>
+</div>
+<a class="anchor" id="ga88e01fa06b585654689a99bcc06bbe66"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_IS_ECC</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">type</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">((<a class="code" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a>(type) &amp;                        \</div><div class="line">      ~PSA_KEY_TYPE_ECC_CURVE_MASK) == PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE)</div><div class="ttc" id="group__crypto__types_html_gace08e46dd7cbf642d50d982a25d02bec"><div class="ttname"><a href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a></div><div class="ttdeci">#define PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR(type)</div><div class="ttdef"><b>Definition:</b> crypto_values.h:365</div></div>
+</div><!-- fragment --><p>Whether a key type is an elliptic curve key (pair or public-only). </p>
+
+</div>
+</div>
+<a class="anchor" id="ga7bf101b671e8cf26f4cb08fcb679db4b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_IS_ECC_KEYPAIR</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">type</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(((type) &amp; ~PSA_KEY_TYPE_ECC_CURVE_MASK) ==                         \</div><div class="line">     PSA_KEY_TYPE_ECC_KEYPAIR_BASE)</div></div><!-- fragment --><p>Whether a key type is an elliptic curve key pair. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga5af146a173b0c84d7e737e2fb6a3c0a7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">type</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(((type) &amp; ~PSA_KEY_TYPE_ECC_CURVE_MASK) ==                         \</div><div class="line">     PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE)</div></div><!-- fragment --><p>Whether a key type is an elliptic curve public key. </p>
+
+</div>
+</div>
+<a class="anchor" id="gac14c6d6e1b2b7f4a92a7b757465cff29"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_IS_KEYPAIR</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">type</td><td>)</td>
+          <td>&#160;&#160;&#160;(((type) &amp; PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_KEY_PAIR)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether a key type is a key pair containing a private part and a public part. </p>
+
+</div>
+</div>
+<a class="anchor" id="gac674a0f059bc0cb72b47f0c517b4f45b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_IS_PUBLIC_KEY</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">type</td><td>)</td>
+          <td>&#160;&#160;&#160;(((type) &amp; PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether a key type is the public part of a key pair. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga0e1d8f241228e49c9cadadfb4579ef1a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_IS_RSA</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">type</td><td>)</td>
+          <td>&#160;&#160;&#160;(<a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a>(type) == <a class="el" href="group__crypto__types.html#ga9ba0878f56c8bcd1995ac017a74f513b">PSA_KEY_TYPE_RSA_PUBLIC_KEY</a>)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether a key type is an RSA key (pair or public-only). </p>
+
+</div>
+</div>
+<a class="anchor" id="gaef86ce4e810e1c2c76068ac874bfef54"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_IS_UNSTRUCTURED</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">type</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(((type) &amp; PSA_KEY_TYPE_CATEGORY_MASK &amp; ~(<a class="code" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x10000000) == \</div><div class="line">     PSA_KEY_TYPE_CATEGORY_SYMMETRIC)</div><div class="ttc" id="group__crypto__types_html_ga578159487dfc7096cb191b0d2befe628"><div class="ttname"><a href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a></div><div class="ttdeci">uint32_t psa_key_type_t</div><div class="ttdoc">Encoding of a key type. </div><div class="ttdef"><b>Definition:</b> crypto_types.h:61</div></div>
+</div><!-- fragment --><p>Whether a key type is an unstructured array of bytes.</p>
+<p>This encompasses both symmetric keys and non-key data. </p>
+
+</div>
+</div>
+<a class="anchor" id="gadbe4c086a6562aefe344bc79e51bdfd3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_IS_VENDOR_DEFINED</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">type</td><td>)</td>
+          <td>&#160;&#160;&#160;(((type) &amp; <a class="el" href="group__crypto__types.html#ga8dbaed2fdb1ebae8aa127ad3988516f7">PSA_KEY_TYPE_VENDOR_FLAG</a>) != 0)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether a key type is vendor-defined. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaf09f1ca1de6a7e7cff0fe516f3f6c91d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_KEYPAIR_OF_PUBLIC_KEY</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">type</td><td>)</td>
+          <td>&#160;&#160;&#160;((type) | PSA_KEY_TYPE_CATEGORY_FLAG_PAIR)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The key pair type corresponding to a public key type.</p>
+<p>You may also pass a key pair type as <code>type</code>, it will be left unchanged.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">type</td><td>A public key type or key pair type.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The corresponding key pair type. If <code>type</code> is not a public key or a key pair, the return value is undefined. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gafce7ab2b54ce97ea5bff73f13a9f3e5b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_NONE&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x00000000)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>An invalid key type value.</p>
+<p>Zero is not the encoding of any key type. </p>
+
+</div>
+</div>
+<a class="anchor" id="gace08e46dd7cbf642d50d982a25d02bec"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">type</td><td>)</td>
+          <td>&#160;&#160;&#160;((type) &amp; ~PSA_KEY_TYPE_CATEGORY_FLAG_PAIR)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The public key type corresponding to a key pair type.</p>
+<p>You may also pass a key pair type as <code>type</code>, it will be left unchanged.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">type</td><td>A public key type or key pair type.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The corresponding public key type. If <code>type</code> is not a public key or a key pair, the return value is undefined. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa97f92025533102616b32d571c940d80"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_RAW_DATA&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x50000001)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Raw data.</p>
+<p>A "key" of this type cannot be used for any cryptographic operation. Applications may use this type to store arbitrary data in the keystore. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga581f50687f5d650456925278948f2799"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_RSA_KEYPAIR&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x70010000)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>RSA key pair (private and public key). </p>
+
+</div>
+</div>
+<a class="anchor" id="ga9ba0878f56c8bcd1995ac017a74f513b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_RSA_PUBLIC_KEY&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x60010000)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>RSA public key. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga8dbaed2fdb1ebae8aa127ad3988516f7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_TYPE_VENDOR_FLAG&#160;&#160;&#160;((<a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>)0x80000000)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Vendor-defined flag</p>
+<p>Key types defined by this standard will never have the <a class="el" href="group__crypto__types.html#ga8dbaed2fdb1ebae8aa127ad3988516f7">PSA_KEY_TYPE_VENDOR_FLAG</a> bit set. Vendors who define additional key types must use an encoding with the <a class="el" href="group__crypto__types.html#ga8dbaed2fdb1ebae8aa127ad3988516f7">PSA_KEY_TYPE_VENDOR_FLAG</a> bit set and should respect the bitwise structure used by standard encodings whenever practical. </p>
+
+</div>
+</div>
+<a class="anchor" id="gab03726c4476174e019a08e2a04018ce8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_MAC_TRUNCATED_LENGTH</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">alg</td><td>)</td>
+          <td>&#160;&#160;&#160;(((alg) &amp; PSA_ALG_MAC_TRUNCATION_MASK) &gt;&gt; PSA_MAC_TRUNCATION_OFFSET)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Length to which a MAC algorithm is truncated.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">alg</td><td>A MAC algorithm identifier (value of type <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a> such that <a class="el" href="group__crypto__types.html#gaca7aee4c9dde316b3b1a150a26eab776">PSA_ALG_IS_MAC</a>(<code>alg</code>) is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Length of the truncated MAC in bytes. </dd>
+<dd>
+0 if <code>alg</code> is a non-truncated MAC algorithm. </dd>
+<dd>
+Unspecified if <code>alg</code> is not a supported MAC algorithm. </dd></dl>
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="gac2e4d47f1300d73c2f829a6d99252d69"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef uint32_t <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Encoding of a cryptographic algorithm. </p>
+<p>For algorithms that can be applied to multiple key types, this type does not encode the key type. For example, for symmetric ciphers based on a block cipher, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69" title="Encoding of a cryptographic algorithm. ">psa_algorithm_t</a> encodes the block cipher mode and the padding mode while the block cipher itself is encoded via <a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628" title="Encoding of a key type. ">psa_key_type_t</a>. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga4e8977c145cce5077c4bce7fec890ad9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef uint16_t <a class="el" href="group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9">psa_ecc_curve_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The type of PSA elliptic curve identifiers. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/group__derivation.html b/docs/html/group__derivation.html
new file mode 100644
index 0000000..0baa784
--- /dev/null
+++ b/docs/html/group__derivation.html
@@ -0,0 +1,523 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Key derivation</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Key derivation</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga90a1995a41e26ed5ca30d2d4641d1168"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#ga90a1995a41e26ed5ca30d2d4641d1168">PSA_KDF_STEP_SECRET</a>&#160;&#160;&#160;((<a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a>)0x0101)</td></tr>
+<tr class="separator:ga90a1995a41e26ed5ca30d2d4641d1168"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9f4da10191bcb690b88756ed8470b03c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#ga9f4da10191bcb690b88756ed8470b03c">PSA_KDF_STEP_LABEL</a>&#160;&#160;&#160;((<a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a>)0x0201)</td></tr>
+<tr class="separator:ga9f4da10191bcb690b88756ed8470b03c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga384777dac55791d8f3a1af72c847b327"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#ga384777dac55791d8f3a1af72c847b327">PSA_KDF_STEP_SALT</a>&#160;&#160;&#160;((<a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a>)0x0202)</td></tr>
+<tr class="separator:ga384777dac55791d8f3a1af72c847b327"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga836afe760bbda3dafc6c29631560b1a0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#ga836afe760bbda3dafc6c29631560b1a0">PSA_KDF_STEP_INFO</a>&#160;&#160;&#160;((<a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a>)0x0203)</td></tr>
+<tr class="separator:ga836afe760bbda3dafc6c29631560b1a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gaac4eeacd36596c548b3a48fc06c5048b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaac4eeacd36596c548b3a48fc06c5048b"></a>
+typedef uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a></td></tr>
+<tr class="memdesc:gaac4eeacd36596c548b3a48fc06c5048b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encoding of the step of a key derivation. <br /></td></tr>
+<tr class="separator:gaac4eeacd36596c548b3a48fc06c5048b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga1825696be813dfac2b8d3d02717e71c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#ga1825696be813dfac2b8d3d02717e71c5">psa_key_derivation_setup</a> (<a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg)</td></tr>
+<tr class="separator:ga1825696be813dfac2b8d3d02717e71c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1b30e888db65c71f5337900848e1b03f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#ga1b30e888db65c71f5337900848e1b03f">psa_key_derivation_input_bytes</a> (<a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator, <a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a> step, const uint8_t *data, size_t data_length)</td></tr>
+<tr class="separator:ga1b30e888db65c71f5337900848e1b03f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9e5f549aa1f6f3863a07008d3d98f91a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#ga9e5f549aa1f6f3863a07008d3d98f91a">psa_key_derivation_input_key</a> (<a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator, <a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a> step, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle)</td></tr>
+<tr class="separator:ga9e5f549aa1f6f3863a07008d3d98f91a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2c7fe304cacc141ffb91553548abc5d2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#ga2c7fe304cacc141ffb91553548abc5d2">psa_key_agreement</a> (<a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator, <a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a> step, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> private_key, const uint8_t *peer_key, size_t peer_key_length)</td></tr>
+<tr class="separator:ga2c7fe304cacc141ffb91553548abc5d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf1b12eff66a1a0020b5bdc8d0e910006"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#gaf1b12eff66a1a0020b5bdc8d0e910006">psa_key_agreement_raw_shared_secret</a> (<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> private_key, const uint8_t *peer_key, size_t peer_key_length, uint8_t *output, size_t output_size, size_t *output_length)</td></tr>
+<tr class="separator:gaf1b12eff66a1a0020b5bdc8d0e910006"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ga836afe760bbda3dafc6c29631560b1a0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KDF_STEP_INFO&#160;&#160;&#160;((<a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a>)0x0203)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>An information string for key derivation.</p>
+<p>This must be a direct input. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga9f4da10191bcb690b88756ed8470b03c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KDF_STEP_LABEL&#160;&#160;&#160;((<a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a>)0x0201)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>A label for key derivation.</p>
+<p>This must be a direct input. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga384777dac55791d8f3a1af72c847b327"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KDF_STEP_SALT&#160;&#160;&#160;((<a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a>)0x0202)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>A salt for key derivation.</p>
+<p>This must be a direct input. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga90a1995a41e26ed5ca30d2d4641d1168"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KDF_STEP_SECRET&#160;&#160;&#160;((<a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a>)0x0101)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>A secret input for key derivation.</p>
+<p>This must be a key of type <a class="el" href="group__crypto__types.html#gae871b2357b8593f33bfd51abbf93ebb1">PSA_KEY_TYPE_DERIVE</a>. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga2c7fe304cacc141ffb91553548abc5d2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_key_agreement </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *&#160;</td>
+          <td class="paramname"><em>generator</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a>&#160;</td>
+          <td class="paramname"><em>step</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>private_key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>peer_key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>peer_key_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Perform a key agreement and use the shared secret as input to a key derivation.</p>
+<p>A key agreement algorithm takes two inputs: a private key <code>private_key</code> a public key <code>peer_key</code>. The result of this function is passed as input to a key derivation. The output of this key derivation can be extracted by reading from the resulting generator to produce keys and other cryptographic material.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">generator</td><td>The generator object to use. It must have been set up with <a class="el" href="group__derivation.html#ga1825696be813dfac2b8d3d02717e71c5">psa_key_derivation_setup()</a> with a key agreement and derivation algorithm <code>alg</code> (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#ga59753742cb06553bd22751bbef472b6f">PSA_ALG_IS_KEY_AGREEMENT</a>(<code>alg</code>) is true and #PSA_ALG_IS_RAW_KEY_AGREEMENT(<code>alg</code>) is false). The generator must be ready for an input of the type given by <code>step</code>. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">step</td><td>Which step the input data is for. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">private_key</td><td>Handle to the private key to use. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">peer_key</td><td>Public key of the peer. The peer key must be in the same format that <a class="el" href="group__import__export.html#gac9f999cb4d098663d56095afe81a453a" title="Import a key in binary format. ">psa_import_key()</a> accepts for the public key type corresponding to the type of private_key. That is, this function performs the equivalent of `psa_import_key(internal_public_key_handle, <a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR(private_key_type)</a>, peer_key, peer_key_length)<code>where </code>private_key_type<code>is the type of</code>private_key`. For example, for EC keys, this means that peer_key is interpreted as a point on the curve that the private key is on. The standard formats for public keys are documented in the documentation of <a class="el" href="group__import__export.html#gad760d1f0d4e60972c78cbb4c8a528256" title="Export a public key or the public part of a key pair in binary format. ">psa_export_public_key()</a>. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">peer_key_length</td><td>Size of <code>peer_key</code> in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>private_key</code> is not compatible with <code>alg</code>, or <code>peer_key</code> is not valid for <code>alg</code> or not compatible with <code>private_key</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not supported or is not a key derivation algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf1b12eff66a1a0020b5bdc8d0e910006"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_key_agreement_raw_shared_secret </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>private_key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>peer_key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>peer_key_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>output_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>output_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Perform a key agreement and use the shared secret as input to a key derivation.</p>
+<p>A key agreement algorithm takes two inputs: a private key <code>private_key</code> a public key <code>peer_key</code>.</p>
+<dl class="section warning"><dt>Warning</dt><dd>The raw result of a key agreement algorithm such as finite-field Diffie-Hellman or elliptic curve Diffie-Hellman has biases and should not be used directly as key material. It should instead be passed as input to a key derivation algorithm. To chain a key agreement with a key derivation, use <a class="el" href="group__derivation.html#ga2c7fe304cacc141ffb91553548abc5d2">psa_key_agreement()</a> and other functions from the key derivation and generator interface.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">private_key</td><td>Handle to the private key to use. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">peer_key</td><td>Public key of the peer. It must be in the same format that <a class="el" href="group__import__export.html#gac9f999cb4d098663d56095afe81a453a" title="Import a key in binary format. ">psa_import_key()</a> accepts. The standard formats for public keys are documented in the documentation of <a class="el" href="group__import__export.html#gad760d1f0d4e60972c78cbb4c8a528256" title="Export a public key or the public part of a key pair in binary format. ">psa_export_public_key()</a>. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">peer_key_length</td><td>Size of <code>peer_key</code> in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Buffer where the decrypted message is to be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">output_size</td><td>Size of the <code>output</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">output_length</td><td>On success, the number of bytes that make up the returned output.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>alg</code> is not a key agreement algorithm </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>private_key</code> is not compatible with <code>alg</code>, or <code>peer_key</code> is not valid for <code>alg</code> or not compatible with <code>private_key</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not a supported key agreement algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1b30e888db65c71f5337900848e1b03f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_key_derivation_input_bytes </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *&#160;</td>
+          <td class="paramname"><em>generator</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a>&#160;</td>
+          <td class="paramname"><em>step</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>data</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>data_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Provide an input for key derivation or key agreement.</p>
+<p>Which inputs are required and in what order depends on the algorithm. Refer to the documentation of each key derivation or key agreement algorithm for information.</p>
+<p>This function passes direct inputs. Some inputs must be passed as keys using <a class="el" href="group__derivation.html#ga9e5f549aa1f6f3863a07008d3d98f91a">psa_key_derivation_input_key()</a> instead of this function. Refer to the documentation of individual step types for information.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">generator</td><td>The generator object to use. It must have been set up with <a class="el" href="group__derivation.html#ga1825696be813dfac2b8d3d02717e71c5">psa_key_derivation_setup()</a> and must not have produced any output yet. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">step</td><td>Which step the input data is for. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>Input data to use. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">data_length</td><td>Size of the <code>data</code> buffer in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>step</code> is not compatible with the generator's algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>step</code> does not allow direct inputs. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The value of <code>step</code> is not valid given the state of <code>generator</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9e5f549aa1f6f3863a07008d3d98f91a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_key_derivation_input_key </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *&#160;</td>
+          <td class="paramname"><em>generator</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b">psa_key_derivation_step_t</a>&#160;</td>
+          <td class="paramname"><em>step</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Provide an input for key derivation in the form of a key.</p>
+<p>Which inputs are required and in what order depends on the algorithm. Refer to the documentation of each key derivation or key agreement algorithm for information.</p>
+<p>This function passes key inputs. Some inputs must be passed as keys of the appropriate type using this function, while others must be passed as direct inputs using <a class="el" href="group__derivation.html#ga1b30e888db65c71f5337900848e1b03f">psa_key_derivation_input_bytes()</a>. Refer to the documentation of individual step types for information.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">generator</td><td>The generator object to use. It must have been set up with <a class="el" href="group__derivation.html#ga1825696be813dfac2b8d3d02717e71c5">psa_key_derivation_setup()</a> and must not have produced any output yet. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">step</td><td>Which step the input data is for. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key. It must have an appropriate type for <code>step</code> and must allow the usage <a class="el" href="group__policy.html#gaf19022acc5ef23cf12477f632b48a0b2">PSA_KEY_USAGE_DERIVE</a>.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>step</code> is not compatible with the generator's algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>step</code> does not allow key inputs. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The value of <code>step</code> is not valid given the state of <code>generator</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1825696be813dfac2b8d3d02717e71c5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_key_derivation_setup </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *&#160;</td>
+          <td class="paramname"><em>generator</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set up a key derivation operation.</p>
+<p>A key derivation algorithm takes some inputs and uses them to create a byte generator which can be used to produce keys and other cryptographic material.</p>
+<p>To use a generator for key derivation:</p><ul>
+<li>Start with an initialized object of type <a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a>.</li>
+<li>Call <a class="el" href="group__derivation.html#ga1825696be813dfac2b8d3d02717e71c5">psa_key_derivation_setup()</a> to select the algorithm.</li>
+<li>Provide the inputs for the key derivation by calling <a class="el" href="group__derivation.html#ga1b30e888db65c71f5337900848e1b03f">psa_key_derivation_input_bytes()</a> or <a class="el" href="group__derivation.html#ga9e5f549aa1f6f3863a07008d3d98f91a">psa_key_derivation_input_key()</a> as appropriate. Which inputs are needed, in what order, and whether they may be keys and if so of what type depends on the algorithm.</li>
+<li>Optionally set the generator's maximum capacity with <a class="el" href="group__generators.html#ga45676ec3c719622f95caaf926f44bb6e">psa_set_generator_capacity()</a>. You may do this before, in the middle of or after providing inputs. For some algorithms, this step is mandatory because the output depends on the maximum capacity.</li>
+<li>Generate output with <a class="el" href="group__generators.html#gab5712ad29b78c2b170e64cc5bcfc1bce">psa_generator_read()</a> or <a class="el" href="group__generators.html#ga7fcdf07cd37279ca167db484053da894">psa_generator_import_key()</a>. Successive calls to these functions use successive output bytes from the generator.</li>
+<li>Clean up the generator object with <a class="el" href="group__generators.html#ga563ca64537d90368899286b36d8cf7f3">psa_generator_abort()</a>.</li>
+</ul>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">generator</td><td>The generator object to set up. It must have been initialized but not set up yet. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>The key derivation algorithm to compute (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gaf8b90c648aa53dbd06c236695e300cd0">PSA_ALG_IS_KEY_DERIVATION</a>(<code>alg</code>) is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>alg</code> is not a key derivation algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not supported or is not a key derivation algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/group__error.html b/docs/html/group__error.html
new file mode 100644
index 0000000..302633b
--- /dev/null
+++ b/docs/html/group__error.html
@@ -0,0 +1,455 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Error codes</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a>  </div>
+  <div class="headertitle">
+<div class="title">Error codes</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga4cc859e2c66ca381c7418db3527a65e1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)0)</td></tr>
+<tr class="separator:ga4cc859e2c66ca381c7418db3527a65e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga24d5fdcdd759f846f79d9e581c63a83f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga24d5fdcdd759f846f79d9e581c63a83f">PSA_ERROR_UNKNOWN_ERROR</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)1)</td></tr>
+<tr class="separator:ga24d5fdcdd759f846f79d9e581c63a83f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1dcc6d130633ed5db8942257581b55dd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)2)</td></tr>
+<tr class="separator:ga1dcc6d130633ed5db8942257581b55dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4d1b8dd8526177a15a210b7afc1accb1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)3)</td></tr>
+<tr class="separator:ga4d1b8dd8526177a15a210b7afc1accb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga695025f4ec11249aee7ea3d0f65e01c8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)4)</td></tr>
+<tr class="separator:ga695025f4ec11249aee7ea3d0f65e01c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac2fee3a51249fbea45360aaa911f3e58"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#gac2fee3a51249fbea45360aaa911f3e58">PSA_ERROR_OCCUPIED_SLOT</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)5)</td></tr>
+<tr class="separator:gac2fee3a51249fbea45360aaa911f3e58"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaba00e3e6ceb2b12965a81e5ac02ae040"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)6)</td></tr>
+<tr class="separator:gaba00e3e6ceb2b12965a81e5ac02ae040"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga933d40fa2a591004f2e93aa91e11db84"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)7)</td></tr>
+<tr class="separator:ga933d40fa2a591004f2e93aa91e11db84"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga798df25a505ebf931f7bec1f80f1f85f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)8)</td></tr>
+<tr class="separator:ga798df25a505ebf931f7bec1f80f1f85f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga91b2ad8a867517a2651f1b076c5216e5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)9)</td></tr>
+<tr class="separator:ga91b2ad8a867517a2651f1b076c5216e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga897a45eb206a6f6b7be7ffbe36f0d766"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga897a45eb206a6f6b7be7ffbe36f0d766">PSA_ERROR_INSUFFICIENT_STORAGE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)10)</td></tr>
+<tr class="separator:ga897a45eb206a6f6b7be7ffbe36f0d766"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5cdb6948371d49e916106249020ea3f7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)11)</td></tr>
+<tr class="separator:ga5cdb6948371d49e916106249020ea3f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadd169a1af2707862b95fb9df91dfc37d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#gadd169a1af2707862b95fb9df91dfc37d">PSA_ERROR_STORAGE_FAILURE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)12)</td></tr>
+<tr class="separator:gadd169a1af2707862b95fb9df91dfc37d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga08b10e70fa5ff0b05c631d9f8f6b2c6b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)13)</td></tr>
+<tr class="separator:ga08b10e70fa5ff0b05c631d9f8f6b2c6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2c5dda1485cb54f2385cb9c1279a7004"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)14)</td></tr>
+<tr class="separator:ga2c5dda1485cb54f2385cb9c1279a7004"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4deb59fec02297ec5d8b42178323f675"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga4deb59fec02297ec5d8b42178323f675">PSA_ERROR_INSUFFICIENT_ENTROPY</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)15)</td></tr>
+<tr class="separator:ga4deb59fec02297ec5d8b42178323f675"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga35927f755d232c4766de600f2c49e9f2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga35927f755d232c4766de600f2c49e9f2">PSA_ERROR_INVALID_SIGNATURE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)16)</td></tr>
+<tr class="separator:ga35927f755d232c4766de600f2c49e9f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gabe29594edbfb152cf153975b0597ac48"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#gabe29594edbfb152cf153975b0597ac48">PSA_ERROR_INVALID_PADDING</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)17)</td></tr>
+<tr class="separator:gabe29594edbfb152cf153975b0597ac48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf1fa61f72e9e5b4a848c991bea495767"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#gaf1fa61f72e9e5b4a848c991bea495767">PSA_ERROR_INSUFFICIENT_CAPACITY</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)18)</td></tr>
+<tr class="separator:gaf1fa61f72e9e5b4a848c991bea495767"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadf22718935657c2c3168c228204085f9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a>&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)19)</td></tr>
+<tr class="separator:gadf22718935657c2c3168c228204085f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga05676e70ba5c6a7565aff3c36677c1f9"><td class="memItemLeft" align="right" valign="top">typedef int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a></td></tr>
+<tr class="memdesc:ga05676e70ba5c6a7565aff3c36677c1f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function return status.  <a href="#ga05676e70ba5c6a7565aff3c36677c1f9">More...</a><br /></td></tr>
+<tr class="separator:ga05676e70ba5c6a7565aff3c36677c1f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ga933d40fa2a591004f2e93aa91e11db84"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_BAD_STATE&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)7)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The requested action cannot be performed in the current state.</p>
+<p>Multipart operations return this error when one of the functions is called out of sequence. Refer to the function descriptions for permitted sequencing of functions.</p>
+<p>Implementations shall not return this error code to indicate that a key slot is occupied when it needs to be free or vice versa, but shall return <a class="el" href="group__error.html#gac2fee3a51249fbea45360aaa911f3e58">PSA_ERROR_OCCUPIED_SLOT</a> or <a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a> as applicable. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga695025f4ec11249aee7ea3d0f65e01c8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_BUFFER_TOO_SMALL&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)4)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>An output buffer is too small.</p>
+<p>Applications can call the <code>PSA_xxx_SIZE</code> macro listed in the function description to determine a sufficient buffer size.</p>
+<p>Implementations should preferably return this error code only in cases when performing the operation with a larger output buffer would succeed. However implementations may return this error if a function has invalid or unsupported parameters in addition to the parameters that determine the necessary output buffer size. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga5cdb6948371d49e916106249020ea3f7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_COMMUNICATION_FAILURE&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)11)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>There was a communication failure inside the implementation.</p>
+<p>This can indicate a communication failure between the application and an external cryptoprocessor or between the cryptoprocessor and an external volatile or persistent memory. A communication failure may be transient or permanent depending on the cause.</p>
+<dl class="section warning"><dt>Warning</dt><dd>If a function returns this error, it is undetermined whether the requested action has completed or not. Implementations should return <a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a> on successful completion whenver possible, however functions may return <a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a> if the requested action was completed successfully in an external cryptoprocessor but there was a breakdown of communication before the cryptoprocessor could report the status to the application. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaba00e3e6ceb2b12965a81e5ac02ae040"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_EMPTY_SLOT&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)6)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>A slot is empty, but must be occupied to carry out the requested action.</p>
+<p>If a handle is invalid, it does not designate an empty slot. The error for an invalid handle is <a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a>. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga08b10e70fa5ff0b05c631d9f8f6b2c6b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_HARDWARE_FAILURE&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)13)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>A hardware failure was detected.</p>
+<p>A hardware failure may be transient or permanent depending on the cause. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaf1fa61f72e9e5b4a848c991bea495767"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_INSUFFICIENT_CAPACITY&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)18)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The generator has insufficient capacity left.</p>
+<p>Once a function returns this error, attempts to read from the generator will always return this error. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga4deb59fec02297ec5d8b42178323f675"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_INSUFFICIENT_ENTROPY&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)15)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>There is not enough entropy to generate random data needed for the requested action.</p>
+<p>This error indicates a failure of a hardware random generator. Application writers should note that this error can be returned not only by functions whose purpose is to generate random data, such as key, IV or nonce generation, but also by functions that execute an algorithm with a randomized result, as well as functions that use randomization of intermediate computations as a countermeasure to certain attacks.</p>
+<p>Implementations should avoid returning this error after <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a> has succeeded. Implementations should generate sufficient entropy during initialization and subsequently use a cryptographically secure pseudorandom generator (PRNG). However implementations may return this error at any time if a policy requires the PRNG to be reseeded during normal operation. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga91b2ad8a867517a2651f1b076c5216e5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_INSUFFICIENT_MEMORY&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)9)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>There is not enough runtime memory.</p>
+<p>If the action is carried out across multiple security realms, this error can refer to available memory in any of the security realms. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga897a45eb206a6f6b7be7ffbe36f0d766"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_INSUFFICIENT_STORAGE&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)10)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>There is not enough persistent storage.</p>
+<p>Functions that modify the key storage return this error code if there is insufficient storage space on the host media. In addition, many functions that do not otherwise access storage may return this error code if the implementation requires a mandatory log entry for the requested action and the log storage space is full. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga798df25a505ebf931f7bec1f80f1f85f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_INVALID_ARGUMENT&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)8)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The parameters passed to the function are invalid.</p>
+<p>Implementations may return this error any time a parameter or combination of parameters are recognized as invalid.</p>
+<p>Implementations shall not return this error code to indicate that a key slot is occupied when it needs to be free or vice versa, but shall return <a class="el" href="group__error.html#gac2fee3a51249fbea45360aaa911f3e58">PSA_ERROR_OCCUPIED_SLOT</a> or <a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a> as applicable.</p>
+<p>Implementation shall not return this error code to indicate that a key handle is invalid, but shall return <a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a> instead. </p>
+
+</div>
+</div>
+<a class="anchor" id="gadf22718935657c2c3168c228204085f9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_INVALID_HANDLE&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)19)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The key handle is not valid. </p>
+
+</div>
+</div>
+<a class="anchor" id="gabe29594edbfb152cf153975b0597ac48"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_INVALID_PADDING&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)17)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The decrypted padding is incorrect.</p>
+<dl class="section warning"><dt>Warning</dt><dd>In some protocols, when decrypting data, it is essential that the behavior of the application does not depend on whether the padding is correct, down to precise timing. Applications should prefer protocols that use authenticated encryption rather than plain encryption. If the application must perform a decryption of unauthenticated data, the application writer should take care not to reveal whether the padding is invalid.</dd></dl>
+<p>Implementations should strive to make valid and invalid padding as close as possible to indistinguishable to an external observer. In particular, the timing of a decryption operation should not depend on the validity of the padding. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga35927f755d232c4766de600f2c49e9f2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_INVALID_SIGNATURE&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)16)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The signature, MAC or hash is incorrect.</p>
+<p>Verification functions return this error if the verification calculations completed successfully, and the value to be verified was determined to be incorrect.</p>
+<p>If the value to verify has an invalid size, implementations may return either <a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a> or <a class="el" href="group__error.html#ga35927f755d232c4766de600f2c49e9f2">PSA_ERROR_INVALID_SIGNATURE</a>. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga4d1b8dd8526177a15a210b7afc1accb1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_NOT_PERMITTED&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)3)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The requested action is denied by a policy.</p>
+<p>Implementations should return this error code when the parameters are recognized as valid and supported, and a policy explicitly denies the requested operation.</p>
+<p>If a subset of the parameters of a function call identify a forbidden operation, and another subset of the parameters are not valid or not supported, it is unspecified whether the function returns <a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a>, <a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a> or <a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a>. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga1dcc6d130633ed5db8942257581b55dd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_NOT_SUPPORTED&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)2)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The requested operation or a parameter is not supported by this implementation.</p>
+<p>Implementations should return this error code when an enumeration parameter such as a key type, algorithm, etc. is not recognized. If a combination of parameters is recognized and identified as not valid, return <a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a> instead. </p>
+
+</div>
+</div>
+<a class="anchor" id="gac2fee3a51249fbea45360aaa911f3e58"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_OCCUPIED_SLOT&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)5)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>A slot is occupied, but must be empty to carry out the requested action.</p>
+<p>If a handle is invalid, it does not designate an occupied slot. The error for an invalid handle is <a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a>. </p>
+
+</div>
+</div>
+<a class="anchor" id="gadd169a1af2707862b95fb9df91dfc37d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_STORAGE_FAILURE&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)12)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>There was a storage failure that may have led to data loss.</p>
+<p>This error indicates that some persistent storage is corrupted. It should not be used for a corruption of volatile memory (use <a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a>), for a communication error between the cryptoprocessor and its external storage (use <a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a>), or when the storage is in a valid state but is full (use <a class="el" href="group__error.html#ga897a45eb206a6f6b7be7ffbe36f0d766">PSA_ERROR_INSUFFICIENT_STORAGE</a>).</p>
+<p>Note that a storage failure does not indicate that any data that was previously read is invalid. However this previously read data may no longer be readable from storage.</p>
+<p>When a storage failure occurs, it is no longer possible to ensure the global integrity of the keystore. Depending on the global integrity guarantees offered by the implementation, access to other data may or may not fail even if the data is still readable but its integrity canont be guaranteed.</p>
+<p>Implementations should only use this error code to report a permanent storage corruption. However application writers should keep in mind that transient errors while reading the storage may be reported using this error code. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga2c5dda1485cb54f2385cb9c1279a7004"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_TAMPERING_DETECTED&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)14)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>A tampering attempt was detected.</p>
+<p>If an application receives this error code, there is no guarantee that previously accessed or computed data was correct and remains confidential. Applications should not perform any security function and should enter a safe failure state.</p>
+<p>Implementations may return this error code if they detect an invalid state that cannot happen during normal operation and that indicates that the implementation's security guarantees no longer hold. Depending on the implementation architecture and on its security and safety goals, the implementation may forcibly terminate the application.</p>
+<p>This error code is intended as a last resort when a security breach is detected and it is unsure whether the keystore data is still protected. Implementations shall only return this error code to report an alarm from a tampering detector, to indicate that the confidentiality of stored data can no longer be guaranteed, or to indicate that the integrity of previously returned data is now considered compromised. Implementations shall not use this error code to indicate a hardware failure that merely makes it impossible to perform the requested operation (use <a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a>, <a class="el" href="group__error.html#gadd169a1af2707862b95fb9df91dfc37d">PSA_ERROR_STORAGE_FAILURE</a>, <a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a>, <a class="el" href="group__error.html#ga4deb59fec02297ec5d8b42178323f675">PSA_ERROR_INSUFFICIENT_ENTROPY</a> or other applicable error code instead).</p>
+<p>This error indicates an attack against the application. Implementations shall not return this error code as a consequence of the behavior of the application itself. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga24d5fdcdd759f846f79d9e581c63a83f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_ERROR_UNKNOWN_ERROR&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)1)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>An error occurred that does not correspond to any defined failure cause.</p>
+<p>Implementations may use this error code if none of the other standard error codes are applicable. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga4cc859e2c66ca381c7418db3527a65e1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_SUCCESS&#160;&#160;&#160;((<a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>)0)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The action was completed successfully. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ga05676e70ba5c6a7565aff3c36677c1f9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef int32_t <a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Function return status. </p>
+<p>This is either <a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a> (which is zero), indicating success, or a nonzero value indicating that an error occurred. Errors are encoded as one of the <code>PSA_ERROR_xxx</code> values defined here. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/group__generators.html b/docs/html/group__generators.html
new file mode 100644
index 0000000..9f93b4d
--- /dev/null
+++ b/docs/html/group__generators.html
@@ -0,0 +1,415 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Generators</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Generators</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga4788b471385fc667876fbd8a0d3fe062"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generators.html#ga4788b471385fc667876fbd8a0d3fe062">PSA_CRYPTO_GENERATOR_INIT</a>&#160;&#160;&#160;{0}</td></tr>
+<tr class="separator:ga4788b471385fc667876fbd8a0d3fe062"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac3222df9b9ecca4d33ae56a7b8fbb1c9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generators.html#gac3222df9b9ecca4d33ae56a7b8fbb1c9">PSA_GENERATOR_UNBRIDLED_CAPACITY</a>&#160;&#160;&#160;((size_t)(-1))</td></tr>
+<tr class="separator:gac3222df9b9ecca4d33ae56a7b8fbb1c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga1f894c4fba202ef8e307d72caf489e3b"><td class="memItemLeft" align="right" valign="top">typedef struct psa_crypto_generator_s&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a></td></tr>
+<tr class="separator:ga1f894c4fba202ef8e307d72caf489e3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7453491e3b440193be2c5dccc2040fd2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generators.html#ga7453491e3b440193be2c5dccc2040fd2">psa_get_generator_capacity</a> (const <a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator, size_t *capacity)</td></tr>
+<tr class="separator:ga7453491e3b440193be2c5dccc2040fd2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga45676ec3c719622f95caaf926f44bb6e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generators.html#ga45676ec3c719622f95caaf926f44bb6e">psa_set_generator_capacity</a> (<a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator, size_t capacity)</td></tr>
+<tr class="separator:ga45676ec3c719622f95caaf926f44bb6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab5712ad29b78c2b170e64cc5bcfc1bce"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generators.html#gab5712ad29b78c2b170e64cc5bcfc1bce">psa_generator_read</a> (<a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator, uint8_t *output, size_t output_length)</td></tr>
+<tr class="separator:gab5712ad29b78c2b170e64cc5bcfc1bce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7fcdf07cd37279ca167db484053da894"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generators.html#ga7fcdf07cd37279ca167db484053da894">psa_generator_import_key</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> type, size_t bits, <a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator)</td></tr>
+<tr class="separator:ga7fcdf07cd37279ca167db484053da894"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga563ca64537d90368899286b36d8cf7f3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__generators.html#ga563ca64537d90368899286b36d8cf7f3">psa_generator_abort</a> (<a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator)</td></tr>
+<tr class="separator:ga563ca64537d90368899286b36d8cf7f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ga4788b471385fc667876fbd8a0d3fe062"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_CRYPTO_GENERATOR_INIT&#160;&#160;&#160;{0}</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>This macro returns a suitable initializer for a generator object of type <a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a>. </p>
+
+</div>
+</div>
+<a class="anchor" id="gac3222df9b9ecca4d33ae56a7b8fbb1c9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_GENERATOR_UNBRIDLED_CAPACITY&#160;&#160;&#160;((size_t)(-1))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Use the maximum possible capacity for a generator.</p>
+<p>Use this value as the capacity argument when setting up a generator to indicate that the generator should have the maximum possible capacity. The value of the maximum possible capacity depends on the generator algorithm. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ga1f894c4fba202ef8e307d72caf489e3b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct psa_crypto_generator_s <a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The type of the state data structure for generators.</p>
+<p>Before calling any function on a generator, the application must initialize it by any of the following means:</p><ul>
+<li>Set the structure to all-bits-zero, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_crypto_generator_t generator;</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;memset(&amp;generator, 0, sizeof(generator));</div></div><!-- fragment --></li>
+<li>Initialize the structure to logical zero values, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_crypto_generator_t generator = {0};</div></div><!-- fragment --></li>
+<li>Initialize the structure to the initializer <a class="el" href="group__generators.html#ga4788b471385fc667876fbd8a0d3fe062">PSA_CRYPTO_GENERATOR_INIT</a>, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_crypto_generator_t generator = PSA_CRYPTO_GENERATOR_INIT;</div></div><!-- fragment --></li>
+<li>Assign the result of the function psa_crypto_generator_init() to the structure, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_crypto_generator_t generator;</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;generator = psa_crypto_generator_init();</div></div><!-- fragment --></li>
+</ul>
+<p>This is an implementation-defined <code>struct</code>. Applications should not make any assumptions about the content of this structure except as directed by the documentation of a specific implementation. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga563ca64537d90368899286b36d8cf7f3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_generator_abort </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *&#160;</td>
+          <td class="paramname"><em>generator</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Abort a generator.</p>
+<p>Once a generator has been aborted, its capacity is zero. Aborting a generator frees all associated resources except for the <code>generator</code> structure itself.</p>
+<p>This function may be called at any time as long as the generator object has been initialized to <a class="el" href="group__generators.html#ga4788b471385fc667876fbd8a0d3fe062">PSA_CRYPTO_GENERATOR_INIT</a>, to psa_crypto_generator_init() or a zero value. In particular, it is valid to call <a class="el" href="group__generators.html#ga563ca64537d90368899286b36d8cf7f3">psa_generator_abort()</a> twice, or to call <a class="el" href="group__generators.html#ga563ca64537d90368899286b36d8cf7f3">psa_generator_abort()</a> on a generator that has not been set up.</p>
+<p>Once aborted, the generator object may be called.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">generator</td><td>The generator to abort.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7fcdf07cd37279ca167db484053da894"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_generator_import_key </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>bits</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *&#160;</td>
+          <td class="paramname"><em>generator</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create a symmetric key from data read from a generator.</p>
+<p>This function reads a sequence of bytes from a generator and imports these bytes as a key. The data that is read is discarded from the generator. The generator's capacity is decreased by the number of bytes read.</p>
+<p>This function is equivalent to calling <a class="el" href="group__generators.html#gab5712ad29b78c2b170e64cc5bcfc1bce">psa_generator_read</a> and passing the resulting output to <a class="el" href="group__import__export.html#gac9f999cb4d098663d56095afe81a453a" title="Import a key in binary format. ">psa_import_key</a>, but if the implementation provides an isolation boundary then the key material is not exposed outside the isolation boundary.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the slot where the key will be stored. It must have been obtained by calling <a class="el" href="group__key__management.html#ga40094b77b7a42b9c8e158395113f1a35">psa_allocate_key()</a> or <a class="el" href="group__key__management.html#ga4108f255d3eaa6d23a7a14b684af8d7c">psa_create_key()</a> and must not contain key material yet. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">type</td><td>Key type (a <code>PSA_KEY_TYPE_XXX</code> value). This must be a symmetric key type. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">bits</td><td>Key size in bits. </td></tr>
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">generator</td><td>The generator object to read from.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. If the key is persistent, the key material and the key's metadata have been saved to persistent storage. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaf1fa61f72e9e5b4a848c991bea495767">PSA_ERROR_INSUFFICIENT_CAPACITY</a></td><td>There were fewer than <code>output_length</code> bytes in the generator. Note that in this case, no output is written to the output buffer. The generator's capacity is set to 0, thus subsequent calls to this function will not succeed, even with a smaller output buffer. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td>The key type or key size is not supported, either by the implementation in general or in this particular slot. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gac2fee3a51249fbea45360aaa911f3e58">PSA_ERROR_OCCUPIED_SLOT</a></td><td>There is already a key in the specified slot. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga897a45eb206a6f6b7be7ffbe36f0d766">PSA_ERROR_INSUFFICIENT_STORAGE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gab5712ad29b78c2b170e64cc5bcfc1bce"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_generator_read </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *&#160;</td>
+          <td class="paramname"><em>generator</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>output_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Read some data from a generator.</p>
+<p>This function reads and returns a sequence of bytes from a generator. The data that is read is discarded from the generator. The generator's capacity is decreased by the number of bytes read.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">generator</td><td>The generator object to read from. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Buffer where the generator output will be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">output_length</td><td>Number of bytes to output.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaf1fa61f72e9e5b4a848c991bea495767">PSA_ERROR_INSUFFICIENT_CAPACITY</a></td><td>There were fewer than <code>output_length</code> bytes in the generator. Note that in this case, no output is written to the output buffer. The generator's capacity is set to 0, thus subsequent calls to this function will not succeed, even with a smaller output buffer. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7453491e3b440193be2c5dccc2040fd2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_get_generator_capacity </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *&#160;</td>
+          <td class="paramname"><em>generator</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>capacity</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Retrieve the current capacity of a generator.</p>
+<p>The capacity of a generator is the maximum number of bytes that it can return. Reading <em>N</em> bytes from a generator reduces its capacity by <em>N</em>.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">generator</td><td>The generator to query. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">capacity</td><td>On success, the capacity of the generator.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga45676ec3c719622f95caaf926f44bb6e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_set_generator_capacity </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *&#160;</td>
+          <td class="paramname"><em>generator</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>capacity</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set the maximum capacity of a generator.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">generator</td><td>The generator object to modify. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">capacity</td><td>The new capacity of the generator. It must be less or equal to the generator's current capacity.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>capacity</code> is larger than the generator's current capacity. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/group__hash.html b/docs/html/group__hash.html
new file mode 100644
index 0000000..b174b4c
--- /dev/null
+++ b/docs/html/group__hash.html
@@ -0,0 +1,619 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Message digests</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Message digests</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga6ab7fe8d3500bc2f21be840b4f4f8d1d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#ga6ab7fe8d3500bc2f21be840b4f4f8d1d">PSA_HASH_OPERATION_INIT</a>&#160;&#160;&#160;{0}</td></tr>
+<tr class="separator:ga6ab7fe8d3500bc2f21be840b4f4f8d1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga3c4205d2ce66c4095fc5c78c25273fab"><td class="memItemLeft" align="right" valign="top">typedef struct psa_hash_operation_s&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a></td></tr>
+<tr class="separator:ga3c4205d2ce66c4095fc5c78c25273fab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gac69f7f19d96a56c28cf3799d11b12156"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#gac69f7f19d96a56c28cf3799d11b12156">psa_hash_compute</a> (<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *input, size_t input_length, uint8_t *hash, size_t hash_size, size_t *hash_length)</td></tr>
+<tr class="separator:gac69f7f19d96a56c28cf3799d11b12156"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0bb6dbd3c310648c3cf7d202413ff0bc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#ga0bb6dbd3c310648c3cf7d202413ff0bc">psa_hash_compare</a> (<a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *input, size_t input_length, const uint8_t *hash, const size_t hash_length)</td></tr>
+<tr class="separator:ga0bb6dbd3c310648c3cf7d202413ff0bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8d72896cf70fc4d514c5c6b978912515"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#ga8d72896cf70fc4d514c5c6b978912515">psa_hash_setup</a> (<a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *operation, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg)</td></tr>
+<tr class="separator:ga8d72896cf70fc4d514c5c6b978912515"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga65b16ef97d7f650899b7db4b7d1112ff"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#ga65b16ef97d7f650899b7db4b7d1112ff">psa_hash_update</a> (<a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *operation, const uint8_t *input, size_t input_length)</td></tr>
+<tr class="separator:ga65b16ef97d7f650899b7db4b7d1112ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4795fd06a0067b0adcd92e9627b8c97e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#ga4795fd06a0067b0adcd92e9627b8c97e">psa_hash_finish</a> (<a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *operation, uint8_t *hash, size_t hash_size, size_t *hash_length)</td></tr>
+<tr class="separator:ga4795fd06a0067b0adcd92e9627b8c97e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7be923c5700c9c70ef77ee9b76d1a5c0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#ga7be923c5700c9c70ef77ee9b76d1a5c0">psa_hash_verify</a> (<a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *operation, const uint8_t *hash, size_t hash_length)</td></tr>
+<tr class="separator:ga7be923c5700c9c70ef77ee9b76d1a5c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab0b4d5f9912a615559497a467b532928"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#gab0b4d5f9912a615559497a467b532928">psa_hash_abort</a> (<a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *operation)</td></tr>
+<tr class="separator:gab0b4d5f9912a615559497a467b532928"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga39673348f3302b4646bd780034a5aeda"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hash.html#ga39673348f3302b4646bd780034a5aeda">psa_hash_clone</a> (const <a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *source_operation, <a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *target_operation)</td></tr>
+<tr class="separator:ga39673348f3302b4646bd780034a5aeda"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ga6ab7fe8d3500bc2f21be840b4f4f8d1d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_HASH_OPERATION_INIT&#160;&#160;&#160;{0}</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>This macro returns a suitable initializer for a hash operation object of type <a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a>. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ga3c4205d2ce66c4095fc5c78c25273fab"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct psa_hash_operation_s <a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The type of the state data structure for multipart hash operations.</p>
+<p>Before calling any function on a hash operation object, the application must initialize it by any of the following means:</p><ul>
+<li>Set the structure to all-bits-zero, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_hash_operation_t operation;</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;memset(&amp;operation, 0, sizeof(operation));</div></div><!-- fragment --></li>
+<li>Initialize the structure to logical zero values, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_hash_operation_t operation = {0};</div></div><!-- fragment --></li>
+<li>Initialize the structure to the initializer <a class="el" href="group__hash.html#ga6ab7fe8d3500bc2f21be840b4f4f8d1d">PSA_HASH_OPERATION_INIT</a>, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_hash_operation_t operation = PSA_HASH_OPERATION_INIT;</div></div><!-- fragment --></li>
+<li>Assign the result of the function psa_hash_operation_init() to the structure, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_hash_operation_t operation;</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;operation = psa_hash_operation_init();</div></div><!-- fragment --></li>
+</ul>
+<p>This is an implementation-defined <code>struct</code>. Applications should not make any assumptions about the content of this structure except as directed by the documentation of a specific implementation. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gab0b4d5f9912a615559497a467b532928"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_hash_abort </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Abort a hash operation.</p>
+<p>Aborting an operation frees all associated resources except for the <code>operation</code> structure itself. Once aborted, the operation object can be reused for another operation by calling <a class="el" href="group__hash.html#ga8d72896cf70fc4d514c5c6b978912515">psa_hash_setup()</a> again.</p>
+<p>You may call this function any time after the operation object has been initialized by any of the following methods:</p><ul>
+<li>A call to <a class="el" href="group__hash.html#ga8d72896cf70fc4d514c5c6b978912515">psa_hash_setup()</a>, whether it succeeds or not.</li>
+<li>Initializing the <code>struct</code> to all-bits-zero.</li>
+<li>Initializing the <code>struct</code> to logical zeros, e.g. <code>psa_hash_operation_t operation = {0}</code>.</li>
+</ul>
+<p>In particular, calling <a class="el" href="group__hash.html#gab0b4d5f9912a615559497a467b532928">psa_hash_abort()</a> after the operation has been terminated by a call to <a class="el" href="group__hash.html#gab0b4d5f9912a615559497a467b532928">psa_hash_abort()</a>, <a class="el" href="group__hash.html#ga4795fd06a0067b0adcd92e9627b8c97e">psa_hash_finish()</a> or <a class="el" href="group__hash.html#ga7be923c5700c9c70ef77ee9b76d1a5c0">psa_hash_verify()</a> is safe and has no effect.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Initialized hash operation.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td><code>operation</code> is not an active hash operation. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga39673348f3302b4646bd780034a5aeda"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_hash_clone </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>source_operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>target_operation</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Clone a hash operation.</p>
+<p>This function copies the state of an ongoing hash operation to a new operation object. In other words, this function is equivalent to calling <a class="el" href="group__hash.html#ga8d72896cf70fc4d514c5c6b978912515">psa_hash_setup()</a> on <code>target_operation</code> with the same algorithm that <code>source_operation</code> was set up for, then <a class="el" href="group__hash.html#ga65b16ef97d7f650899b7db4b7d1112ff">psa_hash_update()</a> on <code>target_operation</code> with the same input that that was passed to <code>source_operation</code>. After this function returns, the two objects are independent, i.e. subsequent calls involving one of the objects do not affect the other object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">source_operation</td><td>The active hash operation to clone. </td></tr>
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">target_operation</td><td>The operation object to set up. It must be initialized but not active.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td><code>source_operation</code> is not an active hash operation. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td><code>target_operation</code> is active. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0bb6dbd3c310648c3cf7d202413ff0bc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_hash_compare </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>input</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>input_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>hash</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const size_t&#160;</td>
+          <td class="paramname"><em>hash_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Calculate the hash (digest) of a message and compare it with a reference value.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>The hash algorithm to compute (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">PSA_ALG_IS_HASH</a>(<code>alg</code>) is true). </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">input</td><td>Buffer containing the message to hash. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">input_length</td><td>Size of the <code>input</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">hash</td><td>Buffer containing the expected hash value. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">hash_length</td><td>Size of the <code>hash</code> buffer in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>The expected hash is identical to the actual hash of the input. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga35927f755d232c4766de600f2c49e9f2">PSA_ERROR_INVALID_SIGNATURE</a></td><td>The hash of the message was calculated successfully, but it differs from the expected hash. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not supported or is not a hash algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gac69f7f19d96a56c28cf3799d11b12156"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_hash_compute </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>input</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>input_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>hash</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>hash_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>hash_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Calculate the hash (digest) of a message.</p>
+<dl class="section note"><dt>Note</dt><dd>To verify the hash of a message against an expected value, use <a class="el" href="group__hash.html#ga0bb6dbd3c310648c3cf7d202413ff0bc">psa_hash_compare()</a> instead.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>The hash algorithm to compute (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">PSA_ALG_IS_HASH</a>(<code>alg</code>) is true). </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">input</td><td>Buffer containing the message to hash. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">input_length</td><td>Size of the <code>input</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">hash</td><td>Buffer where the hash is to be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">hash_size</td><td>Size of the <code>hash</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">hash_length</td><td>On success, the number of bytes that make up the hash value. This is always <a class="el" href="crypto__sizes_8h.html#aef340331ce3cba2b57e1fc5624bf1f99">PSA_HASH_SIZE</a>(<code>alg</code>) where <code>alg</code> is the hash algorithm that is calculated.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not supported or is not a hash algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4795fd06a0067b0adcd92e9627b8c97e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_hash_finish </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>hash</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>hash_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>hash_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Finish the calculation of the hash of a message.</p>
+<p>The application must call <a class="el" href="group__hash.html#ga8d72896cf70fc4d514c5c6b978912515">psa_hash_setup()</a> before calling this function. This function calculates the hash of the message formed by concatenating the inputs passed to preceding calls to <a class="el" href="group__hash.html#ga65b16ef97d7f650899b7db4b7d1112ff">psa_hash_update()</a>.</p>
+<p>When this function returns, the operation becomes inactive.</p>
+<dl class="section warning"><dt>Warning</dt><dd>Applications should not call this function if they expect a specific value for the hash. Call <a class="el" href="group__hash.html#ga7be923c5700c9c70ef77ee9b76d1a5c0">psa_hash_verify()</a> instead. Beware that comparing integrity or authenticity data such as hash values with a function such as <code>memcmp</code> is risky because the time taken by the comparison may leak information about the hashed data which could allow an attacker to guess a valid hash and thereby bypass security controls.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Active hash operation. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">hash</td><td>Buffer where the hash is to be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">hash_size</td><td>Size of the <code>hash</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">hash_length</td><td>On success, the number of bytes that make up the hash value. This is always <a class="el" href="crypto__sizes_8h.html#aef340331ce3cba2b57e1fc5624bf1f99">PSA_HASH_SIZE</a>(<code>alg</code>) where <code>alg</code> is the hash algorithm that is calculated.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The operation state is not valid (not set up, or already completed). </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a></td><td>The size of the <code>hash</code> buffer is too small. You can determine a sufficient buffer size by calling <a class="el" href="crypto__sizes_8h.html#aef340331ce3cba2b57e1fc5624bf1f99">PSA_HASH_SIZE</a>(<code>alg</code>) where <code>alg</code> is the hash algorithm that is calculated. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8d72896cf70fc4d514c5c6b978912515"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_hash_setup </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set up a multipart hash operation.</p>
+<p>The sequence of operations to calculate a hash (message digest) is as follows:</p><ol type="1">
+<li>Allocate an operation object which will be passed to all the functions listed here.</li>
+<li>Initialize the operation object with one of the methods described in the documentation for <a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a>, e.g. PSA_HASH_OPERATION_INIT.</li>
+<li>Call <a class="el" href="group__hash.html#ga8d72896cf70fc4d514c5c6b978912515">psa_hash_setup()</a> to specify the algorithm.</li>
+<li>Call <a class="el" href="group__hash.html#ga65b16ef97d7f650899b7db4b7d1112ff">psa_hash_update()</a> zero, one or more times, passing a fragment of the message each time. The hash that is calculated is the hash of the concatenation of these messages in order.</li>
+<li>To calculate the hash, call <a class="el" href="group__hash.html#ga4795fd06a0067b0adcd92e9627b8c97e">psa_hash_finish()</a>. To compare the hash with an expected value, call <a class="el" href="group__hash.html#ga7be923c5700c9c70ef77ee9b76d1a5c0">psa_hash_verify()</a>.</li>
+</ol>
+<p>The application may call <a class="el" href="group__hash.html#gab0b4d5f9912a615559497a467b532928">psa_hash_abort()</a> at any time after the operation has been initialized.</p>
+<p>After a successful call to <a class="el" href="group__hash.html#ga8d72896cf70fc4d514c5c6b978912515">psa_hash_setup()</a>, the application must eventually terminate the operation. The following events terminate an operation:</p><ul>
+<li>A failed call to <a class="el" href="group__hash.html#ga65b16ef97d7f650899b7db4b7d1112ff">psa_hash_update()</a>.</li>
+<li>A call to <a class="el" href="group__hash.html#ga4795fd06a0067b0adcd92e9627b8c97e">psa_hash_finish()</a>, <a class="el" href="group__hash.html#ga7be923c5700c9c70ef77ee9b76d1a5c0">psa_hash_verify()</a> or <a class="el" href="group__hash.html#gab0b4d5f9912a615559497a467b532928">psa_hash_abort()</a>.</li>
+</ul>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>The operation object to set up. It must have been initialized as per the documentation for <a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> and not yet in use. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>The hash algorithm to compute (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f">PSA_ALG_IS_HASH</a>(<code>alg</code>) is true).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not supported or is not a hash algorithm. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga65b16ef97d7f650899b7db4b7d1112ff"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_hash_update </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>input</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>input_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Add a message fragment to a multipart hash operation.</p>
+<p>The application must call <a class="el" href="group__hash.html#ga8d72896cf70fc4d514c5c6b978912515">psa_hash_setup()</a> before calling this function.</p>
+<p>If this function returns an error status, the operation becomes inactive.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Active hash operation. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">input</td><td>Buffer containing the message fragment to hash. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">input_length</td><td>Size of the <code>input</code> buffer in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The operation state is not valid (not set up, or already completed). </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7be923c5700c9c70ef77ee9b76d1a5c0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_hash_verify </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab">psa_hash_operation_t</a> *&#160;</td>
+          <td class="paramname"><em>operation</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>hash</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>hash_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Finish the calculation of the hash of a message and compare it with an expected value.</p>
+<p>The application must call <a class="el" href="group__hash.html#ga8d72896cf70fc4d514c5c6b978912515">psa_hash_setup()</a> before calling this function. This function calculates the hash of the message formed by concatenating the inputs passed to preceding calls to <a class="el" href="group__hash.html#ga65b16ef97d7f650899b7db4b7d1112ff">psa_hash_update()</a>. It then compares the calculated hash with the expected hash passed as a parameter to this function.</p>
+<p>When this function returns, the operation becomes inactive.</p>
+<dl class="section note"><dt>Note</dt><dd>Implementations shall make the best effort to ensure that the comparison between the actual hash and the expected hash is performed in constant time.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">operation</td><td>Active hash operation. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">hash</td><td>Buffer containing the expected hash value. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">hash_length</td><td>Size of the <code>hash</code> buffer in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>The expected hash is identical to the actual hash of the message. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga35927f755d232c4766de600f2c49e9f2">PSA_ERROR_INVALID_SIGNATURE</a></td><td>The hash of the message was calculated successfully, but it differs from the expected hash. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The operation state is not valid (not set up, or already completed). </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/group__import__export.html b/docs/html/group__import__export.html
new file mode 100644
index 0000000..7c61d7b
--- /dev/null
+++ b/docs/html/group__import__export.html
@@ -0,0 +1,634 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Key import and export</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Key import and export</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gac9f999cb4d098663d56095afe81a453a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__import__export.html#gac9f999cb4d098663d56095afe81a453a">psa_import_key</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> type, const uint8_t *data, size_t data_length)</td></tr>
+<tr class="memdesc:gac9f999cb4d098663d56095afe81a453a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Import a key in binary format.  <a href="#gac9f999cb4d098663d56095afe81a453a">More...</a><br /></td></tr>
+<tr class="separator:gac9f999cb4d098663d56095afe81a453a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga165085fc1bc7a78b91792fdd94ae102c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__import__export.html#ga165085fc1bc7a78b91792fdd94ae102c">psa_destroy_key</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle)</td></tr>
+<tr class="memdesc:ga165085fc1bc7a78b91792fdd94ae102c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destroy a key.  <a href="#ga165085fc1bc7a78b91792fdd94ae102c">More...</a><br /></td></tr>
+<tr class="separator:ga165085fc1bc7a78b91792fdd94ae102c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae8939902d6977ea8ad13eb7b4db9a042"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__import__export.html#gae8939902d6977ea8ad13eb7b4db9a042">psa_get_key_information</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> *type, size_t *bits)</td></tr>
+<tr class="memdesc:gae8939902d6977ea8ad13eb7b4db9a042"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get basic metadata about a key.  <a href="#gae8939902d6977ea8ad13eb7b4db9a042">More...</a><br /></td></tr>
+<tr class="separator:gae8939902d6977ea8ad13eb7b4db9a042"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga091da8d3d39137fd6ad59f2b10234300"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__import__export.html#ga091da8d3d39137fd6ad59f2b10234300">psa_set_key_domain_parameters</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> type, const uint8_t *data, size_t data_length)</td></tr>
+<tr class="memdesc:ga091da8d3d39137fd6ad59f2b10234300"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set domain parameters for a key.  <a href="#ga091da8d3d39137fd6ad59f2b10234300">More...</a><br /></td></tr>
+<tr class="separator:ga091da8d3d39137fd6ad59f2b10234300"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae260b92e32ac5d63f7dfc6ffdf6536f7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__import__export.html#gae260b92e32ac5d63f7dfc6ffdf6536f7">psa_get_key_domain_parameters</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, uint8_t *data, size_t data_size, size_t *data_length)</td></tr>
+<tr class="memdesc:gae260b92e32ac5d63f7dfc6ffdf6536f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get domain parameters for a key.  <a href="#gae260b92e32ac5d63f7dfc6ffdf6536f7">More...</a><br /></td></tr>
+<tr class="separator:gae260b92e32ac5d63f7dfc6ffdf6536f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga902b9a7a6cf34d6111668be777b05eaf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__import__export.html#ga902b9a7a6cf34d6111668be777b05eaf">psa_export_key</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, uint8_t *data, size_t data_size, size_t *data_length)</td></tr>
+<tr class="memdesc:ga902b9a7a6cf34d6111668be777b05eaf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Export a key in binary format.  <a href="#ga902b9a7a6cf34d6111668be777b05eaf">More...</a><br /></td></tr>
+<tr class="separator:ga902b9a7a6cf34d6111668be777b05eaf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad760d1f0d4e60972c78cbb4c8a528256"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__import__export.html#gad760d1f0d4e60972c78cbb4c8a528256">psa_export_public_key</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, uint8_t *data, size_t data_size, size_t *data_length)</td></tr>
+<tr class="memdesc:gad760d1f0d4e60972c78cbb4c8a528256"><td class="mdescLeft">&#160;</td><td class="mdescRight">Export a public key or the public part of a key pair in binary format.  <a href="#gad760d1f0d4e60972c78cbb4c8a528256">More...</a><br /></td></tr>
+<tr class="separator:gad760d1f0d4e60972c78cbb4c8a528256"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5c1c24176cfb1517a8806235b3162a9d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__import__export.html#ga5c1c24176cfb1517a8806235b3162a9d">psa_copy_key</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> source_handle, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> target_handle, const <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *constraint)</td></tr>
+<tr class="separator:ga5c1c24176cfb1517a8806235b3162a9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga5c1c24176cfb1517a8806235b3162a9d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_copy_key </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>source_handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>target_handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *&#160;</td>
+          <td class="paramname"><em>constraint</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Make a copy of a key.</p>
+<p>Copy key material from one location to another.</p>
+<p>This function is primarily useful to copy a key from one lifetime to another. The target key retains its lifetime and location.</p>
+<p>In an implementation where slots have different ownerships, this functin may be used to share a key with a different party, subject to implementation-defined restrictions on key sharing. In this case <code>constraint</code> would typically prevent the recipient from exporting the key.</p>
+<p>The resulting key may only be used in a way that conforms to all three of: the policy of the source key, the policy previously set on the target, and the <code>constraint</code> parameter passed when calling this function.</p><ul>
+<li>The usage flags on the resulting key are the bitwise-and of the usage flags on the source policy, the previously-set target policy and the policy constraint.</li>
+<li>If all three policies allow the same algorithm or wildcard-based algorithm policy, the resulting key has the same algorithm policy.</li>
+<li>If one of the policies allows an algorithm and all the other policies either allow the same algorithm or a wildcard-based algorithm policy that includes this algorithm, the resulting key allows the same algorithm.</li>
+</ul>
+<p>The effect of this function on implementation-defined metadata is implementation-defined.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">source_handle</td><td>The key to copy. It must be a handle to an occupied slot. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">target_handle</td><td>A handle to the target slot. It must not contain key material yet. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">constraint</td><td>An optional policy constraint. If this parameter is non-null then the resulting key will conform to this policy in addition to the source policy and the policy already present on the target slot. If this parameter is null then the function behaves in the same way as if it was the target policy, i.e. only the source and target policies apply.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gac2fee3a51249fbea45360aaa911f3e58">PSA_ERROR_OCCUPIED_SLOT</a></td><td><code>target</code> already contains key material. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td><code>source</code> does not contain key material. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td>The policy constraints on the source, on the target and <code>constraints</code> are incompatible. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td>The source key is not exportable and its lifetime does not allow copying it to the target's lifetime. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga897a45eb206a6f6b7be7ffbe36f0d766">PSA_ERROR_INSUFFICIENT_STORAGE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga165085fc1bc7a78b91792fdd94ae102c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_destroy_key </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Destroy a key. </p>
+<p>This function destroys the content of the key slot from both volatile memory and, if applicable, non-volatile storage. Implementations shall make a best effort to ensure that any previous content of the slot is unrecoverable.</p>
+<p>This function also erases any metadata such as policies and frees all resources associated with the key.</p>
+<p>If the key is currently in use in a multipart operation, the multipart operation is aborted.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">handle</td><td>Handle to the key slot to erase.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>The slot's content, if any, has been erased. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td>The slot holds content and cannot be erased because it is read-only, either due to a policy or due to physical restrictions. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td>There was an failure in communication with the cryptoprocessor. The key material may still be present in the cryptoprocessor. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadd169a1af2707862b95fb9df91dfc37d">PSA_ERROR_STORAGE_FAILURE</a></td><td>The storage is corrupted. Implementations shall make a best effort to erase key material even in this stage, however applications should be aware that it may be impossible to guarantee that the key material is not recoverable in such cases. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td>An unexpected condition which is not a storage corruption or a communication failure occurred. The cryptoprocessor may have been compromised. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga902b9a7a6cf34d6111668be777b05eaf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_export_key </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>data</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>data_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>data_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Export a key in binary format. </p>
+<p>The output of this function can be passed to <a class="el" href="group__import__export.html#gac9f999cb4d098663d56095afe81a453a" title="Import a key in binary format. ">psa_import_key()</a> to create an equivalent object.</p>
+<p>If the implementation of <a class="el" href="group__import__export.html#gac9f999cb4d098663d56095afe81a453a" title="Import a key in binary format. ">psa_import_key()</a> supports other formats beyond the format specified here, the output from <a class="el" href="group__import__export.html#ga902b9a7a6cf34d6111668be777b05eaf" title="Export a key in binary format. ">psa_export_key()</a> must use the representation specified here, not the original representation.</p>
+<p>For standard key types, the output format is as follows:</p>
+<ul>
+<li>For symmetric keys (including MAC keys), the format is the raw bytes of the key.</li>
+<li>For DES, the key data consists of 8 bytes. The parity bits must be correct.</li>
+<li>For Triple-DES, the format is the concatenation of the two or three DES keys.</li>
+<li>For RSA key pairs (<a class="el" href="group__crypto__types.html#ga581f50687f5d650456925278948f2799">PSA_KEY_TYPE_RSA_KEYPAIR</a>), the format is the non-encrypted DER encoding of the representation defined by PKCS#1 (RFC 8017) as <code>RSAPrivateKey</code>, version 0. <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;RSAPrivateKey ::= SEQUENCE {</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;    version             INTEGER,  -- must be 0</div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;    modulus             INTEGER,  -- n</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;    publicExponent      INTEGER,  -- e</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;    privateExponent     INTEGER,  -- d</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;    prime1              INTEGER,  -- p</div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;    prime2              INTEGER,  -- q</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;    exponent1           INTEGER,  -- d mod (p-1)</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;    exponent2           INTEGER,  -- d mod (q-1)</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;    coefficient         INTEGER,  -- (inverse of q) mod p</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;}</div></div><!-- fragment --></li>
+<li>For DSA private keys (<a class="el" href="group__crypto__types.html#ga011010ee28c20388f3d89fb27088ed62">PSA_KEY_TYPE_DSA_KEYPAIR</a>), the format is the representation of the private key <code>x</code> as a big-endian byte string. The length of the byte string is the private key size in bytes (leading zeroes are not stripped).</li>
+<li>For elliptic curve key pairs (key types for which <a class="el" href="group__crypto__types.html#ga7bf101b671e8cf26f4cb08fcb679db4b">PSA_KEY_TYPE_IS_ECC_KEYPAIR</a> is true), the format is a representation of the private value as a <code>ceiling(m/8)</code>-byte string where <code>m</code> is the bit size associated with the curve, i.e. the bit size of the order of the curve's coordinate field. This byte string is in little-endian order for Montgomery curves (curve types <code>PSA_ECC_CURVE_CURVEXXX</code>), and in big-endian order for Weierstrass curves (curve types <code>PSA_ECC_CURVE_SECTXXX</code>, <code>PSA_ECC_CURVE_SECPXXX</code> and <code>PSA_ECC_CURVE_BRAINPOOL_PXXX</code>). This is the content of the <code>privateKey</code> field of the <code>ECPrivateKey</code> format defined by RFC 5915.</li>
+<li>For Diffie-Hellman key exchange key pairs (<a class="el" href="group__crypto__types.html#ga39b63c6b97a62a316c0660bf72b2fdd5">PSA_KEY_TYPE_DH_KEYPAIR</a>), the format is the representation of the private key <code>x</code> as a big-endian byte string. The length of the byte string is the private key size in bytes (leading zeroes are not stripped).</li>
+<li>For public keys (key types for which <a class="el" href="group__crypto__types.html#gac674a0f059bc0cb72b47f0c517b4f45b">PSA_KEY_TYPE_IS_PUBLIC_KEY</a> is true), the format is the same as for <a class="el" href="group__import__export.html#gad760d1f0d4e60972c78cbb4c8a528256" title="Export a public key or the public part of a key pair in binary format. ">psa_export_public_key()</a>.</li>
+</ul>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to export. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">data</td><td>Buffer where the key data is to be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">data_size</td><td>Size of the <code>data</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">data_length</td><td>On success, the number of bytes that make up the key data.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a></td><td>The size of the <code>data</code> buffer is too small. You can determine a sufficient buffer size by calling <a class="el" href="crypto__sizes_8h.html#a0aae885cc8ff92e00fb5248420b939c3">PSA_KEY_EXPORT_MAX_SIZE</a>(<code>type</code>, <code>bits</code>) where <code>type</code> is the key type and <code>bits</code> is the key size in bits. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gad760d1f0d4e60972c78cbb4c8a528256"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_export_public_key </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>data</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>data_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>data_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Export a public key or the public part of a key pair in binary format. </p>
+<p>The output of this function can be passed to <a class="el" href="group__import__export.html#gac9f999cb4d098663d56095afe81a453a" title="Import a key in binary format. ">psa_import_key()</a> to create an object that is equivalent to the public key.</p>
+<p>This specification supports a single format for each key type. Implementations may support other formats as long as the standard format is supported. Implementations that support other formats should ensure that the formats are clearly unambiguous so as to minimize the risk that an invalid input is accidentally interpreted according to a different format.</p>
+<p>For standard key types, the output format is as follows:</p><ul>
+<li>For RSA public keys (<a class="el" href="group__crypto__types.html#ga9ba0878f56c8bcd1995ac017a74f513b">PSA_KEY_TYPE_RSA_PUBLIC_KEY</a>), the DER encoding of the representation defined by RFC 3279 &sect;2.3.1 as <code>RSAPublicKey</code>. <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;RSAPublicKey ::= SEQUENCE {</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;   modulus            INTEGER,    -- n</div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;   publicExponent     INTEGER  }  -- e</div></div><!-- fragment --></li>
+<li>For elliptic curve public keys (key types for which <a class="el" href="group__crypto__types.html#ga5af146a173b0c84d7e737e2fb6a3c0a7">PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY</a> is true), the format is the uncompressed representation defined by SEC1 &sect;2.3.3 as the content of an ECPoint. Let <code>m</code> be the bit size associated with the curve, i.e. the bit size of <code>q</code> for a curve over <code>F_q</code>. The representation consists of:<ul>
+<li>The byte 0x04;</li>
+<li><code>x_P</code> as a <code>ceiling(m/8)</code>-byte string, big-endian;</li>
+<li><code>y_P</code> as a <code>ceiling(m/8)</code>-byte string, big-endian.</li>
+</ul>
+</li>
+<li>For DSA public keys (<a class="el" href="group__crypto__types.html#ga5e7439c2905136366c3a876e62e5ddfc">PSA_KEY_TYPE_DSA_PUBLIC_KEY</a>), the format is the representation of the public key <code>y = g^x mod p</code> as a big-endian byte string. The length of the byte string is the length of the base prime <code>p</code> in bytes.</li>
+<li>For Diffie-Hellman key exchange public keys (<a class="el" href="group__crypto__types.html#ga325a340d7c72d99d3a678eb210bf6e0a">PSA_KEY_TYPE_DH_PUBLIC_KEY</a>), the format is the representation of the public key <code>y = g^x mod p</code> as a big-endian byte string. The length of the byte string is the length of the base prime <code>p</code> in bytes.</li>
+</ul>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to export. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">data</td><td>Buffer where the key data is to be written. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">data_size</td><td>Size of the <code>data</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">data_length</td><td>On success, the number of bytes that make up the key data.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td>The key is neither a public key nor a key pair. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8">PSA_ERROR_BUFFER_TOO_SMALL</a></td><td>The size of the <code>data</code> buffer is too small. You can determine a sufficient buffer size by calling <a class="el" href="crypto__sizes_8h.html#a0aae885cc8ff92e00fb5248420b939c3">PSA_KEY_EXPORT_MAX_SIZE</a>(<a class="el" href="group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR</a>(<code>type</code>), <code>bits</code>) where <code>type</code> is the key type and <code>bits</code> is the key size in bits. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gae260b92e32ac5d63f7dfc6ffdf6536f7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_get_key_domain_parameters </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>data</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>data_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>data_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get domain parameters for a key. </p>
+<p>Get the domain parameters for a key with this function, if any. The format of the domain parameters written to <code>data</code> is specified in the documentation for <a class="el" href="group__import__export.html#ga091da8d3d39137fd6ad59f2b10234300" title="Set domain parameters for a key. ">psa_set_key_domain_parameters()</a>.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key to get domain parameters from. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">data</td><td>On success, the key domain parameters. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">data_size</td><td>Size of the <code>data</code> buffer in bytes. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">data_length</td><td>On success, the number of bytes that make up the key domain parameters data.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td>There is no key in the specified slot. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gae8939902d6977ea8ad13eb7b4db9a042"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_get_key_information </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> *&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>bits</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get basic metadata about a key. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key slot to query. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">type</td><td>On success, the key type (a <code>PSA_KEY_TYPE_XXX</code> value). This may be a null pointer, in which case the key type is not written. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">bits</td><td>On success, the key size in bits. This may be a null pointer, in which case the key size is not written.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td>The handle is to a key slot which does not contain key material yet. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gac9f999cb4d098663d56095afe81a453a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_import_key </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>data</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>data_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Import a key in binary format. </p>
+<p>This function supports any output from <a class="el" href="group__import__export.html#ga902b9a7a6cf34d6111668be777b05eaf" title="Export a key in binary format. ">psa_export_key()</a>. Refer to the documentation of <a class="el" href="group__import__export.html#gad760d1f0d4e60972c78cbb4c8a528256" title="Export a public key or the public part of a key pair in binary format. ">psa_export_public_key()</a> for the format of public keys and to the documentation of <a class="el" href="group__import__export.html#ga902b9a7a6cf34d6111668be777b05eaf" title="Export a key in binary format. ">psa_export_key()</a> for the format for other key types.</p>
+<p>This specification supports a single format for each key type. Implementations may support other formats as long as the standard format is supported. Implementations that support other formats should ensure that the formats are clearly unambiguous so as to minimize the risk that an invalid input is accidentally interpreted according to a different format.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the slot where the key will be stored. It must have been obtained by calling <a class="el" href="group__key__management.html#ga40094b77b7a42b9c8e158395113f1a35">psa_allocate_key()</a> or <a class="el" href="group__key__management.html#ga4108f255d3eaa6d23a7a14b684af8d7c">psa_create_key()</a> and must not contain key material yet. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">type</td><td>Key type (a <code>PSA_KEY_TYPE_XXX</code> value). On a successful import, the key slot will contain a key of this type. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>Buffer containing the key data. The content of this buffer is interpreted according to <code>type</code>. It must contain the format described in the documentation of <a class="el" href="group__import__export.html#ga902b9a7a6cf34d6111668be777b05eaf" title="Export a key in binary format. ">psa_export_key()</a> or <a class="el" href="group__import__export.html#gad760d1f0d4e60972c78cbb4c8a528256" title="Export a public key or the public part of a key pair in binary format. ">psa_export_public_key()</a> for the chosen type. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">data_length</td><td>Size of the <code>data</code> buffer in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. If the key is persistent, the key material and the key's metadata have been saved to persistent storage. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td>The key type or key size is not supported, either by the implementation in general or in this particular slot. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td>The key slot is invalid, or the key data is not correctly formatted. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gac2fee3a51249fbea45360aaa911f3e58">PSA_ERROR_OCCUPIED_SLOT</a></td><td>There is already a key in the specified slot. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga897a45eb206a6f6b7be7ffbe36f0d766">PSA_ERROR_INSUFFICIENT_STORAGE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadd169a1af2707862b95fb9df91dfc37d">PSA_ERROR_STORAGE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga091da8d3d39137fd6ad59f2b10234300"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_set_key_domain_parameters </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint8_t *&#160;</td>
+          <td class="paramname"><em>data</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>data_length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set domain parameters for a key. </p>
+<p>Some key types require additional domain parameters to be set before import or generation of the key. The domain parameters can be set with this function or, for key generation, through the <code>extra</code> parameter of <a class="el" href="group__random.html#ga72921520494b4f007a3afb904cd9ecdd" title="Generate a key or key pair. ">psa_generate_key()</a>.</p>
+<p>The format for the required domain parameters varies by the key type.</p><ul>
+<li>For DSA public keys (<a class="el" href="group__crypto__types.html#ga5e7439c2905136366c3a876e62e5ddfc">PSA_KEY_TYPE_DSA_PUBLIC_KEY</a>), the <code>Dss-Parms</code> format as defined by RFC 3279 &sect;2.3.2. <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;Dss-Parms ::= SEQUENCE  {</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;   p       INTEGER,</div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;   q       INTEGER,</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;   g       INTEGER</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;}</div></div><!-- fragment --></li>
+<li>For Diffie-Hellman key exchange keys (<a class="el" href="group__crypto__types.html#ga325a340d7c72d99d3a678eb210bf6e0a">PSA_KEY_TYPE_DH_PUBLIC_KEY</a>), the <code>DomainParameters</code> format as defined by RFC 3279 &sect;2.3.3. <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;DomainParameters ::= SEQUENCE {</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;   p               INTEGER,                    -- odd prime, p=jq +1</div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;   g               INTEGER,                    -- generator, g</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;   q               INTEGER,                    -- factor of p-1</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;   j               INTEGER OPTIONAL,           -- subgroup factor</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;   validationParms ValidationParms OPTIONAL</div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;}</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;ValidationParms ::= SEQUENCE {</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;   seed            BIT STRING,</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;   pgenCounter     INTEGER</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;}</div></div><!-- fragment --></li>
+</ul>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the slot where the key will be stored. This must be a valid slot for a key of the chosen type: it must have been obtained by calling <a class="el" href="group__key__management.html#ga40094b77b7a42b9c8e158395113f1a35">psa_allocate_key()</a> or <a class="el" href="group__key__management.html#ga4108f255d3eaa6d23a7a14b684af8d7c">psa_create_key()</a> with the correct <code>type</code> and with a maximum size that is compatible with <code>data</code>. It must not contain key material yet. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">type</td><td>Key type (a <code>PSA_KEY_TYPE_XXX</code> value). When subsequently creating key material into <code>handle</code>, the type must be compatible. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>Buffer containing the key domain parameters. The content of this buffer is interpreted according to <code>type</code>. of <a class="el" href="group__import__export.html#ga902b9a7a6cf34d6111668be777b05eaf" title="Export a key in binary format. ">psa_export_key()</a> or <a class="el" href="group__import__export.html#gad760d1f0d4e60972c78cbb4c8a528256" title="Export a public key or the public part of a key pair in binary format. ">psa_export_public_key()</a> for the chosen type. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">data_length</td><td>Size of the <code>data</code> buffer in bytes.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gac2fee3a51249fbea45360aaa911f3e58">PSA_ERROR_OCCUPIED_SLOT</a></td><td>There is already a key in the specified slot. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/group__initialization.html b/docs/html/group__initialization.html
new file mode 100644
index 0000000..d9574b8
--- /dev/null
+++ b/docs/html/group__initialization.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Library initialization</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Library initialization</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga2de150803fc2f7dc6101d5af7e921dd9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9">psa_crypto_init</a> (void)</td></tr>
+<tr class="memdesc:ga2de150803fc2f7dc6101d5af7e921dd9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Library initialization.  <a href="#ga2de150803fc2f7dc6101d5af7e921dd9">More...</a><br /></td></tr>
+<tr class="separator:ga2de150803fc2f7dc6101d5af7e921dd9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga2de150803fc2f7dc6101d5af7e921dd9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_crypto_init </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Library initialization. </p>
+<p>Applications must call this function before calling any other function in this module.</p>
+<p>Applications may call this function more than once. Once a call succeeds, subsequent calls are guaranteed to succeed.</p>
+<p>If the application calls other functions before calling <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>, the behavior is undefined. Implementations are encouraged to either perform the operation as if the library had been initialized or to return <a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a> or some other applicable error. In particular, implementations should not return a success status if the lack of initialization may have security implications, for example due to improper seeding of the random number generator.</p>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4deb59fec02297ec5d8b42178323f675">PSA_ERROR_INSUFFICIENT_ENTROPY</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/group__key__lifetimes.html b/docs/html/group__key__lifetimes.html
new file mode 100644
index 0000000..5fefd1d
--- /dev/null
+++ b/docs/html/group__key__lifetimes.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Key lifetimes</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a>  </div>
+  <div class="headertitle">
+<div class="title">Key lifetimes</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga8b438870ba69489b685730d346455108"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__lifetimes.html#ga8b438870ba69489b685730d346455108">PSA_KEY_LIFETIME_VOLATILE</a>&#160;&#160;&#160;((<a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a>)0x00000000)</td></tr>
+<tr class="separator:ga8b438870ba69489b685730d346455108"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3713a01c5fcd5f7eae46ff22ceaf6d02"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__lifetimes.html#ga3713a01c5fcd5f7eae46ff22ceaf6d02">PSA_KEY_LIFETIME_PERSISTENT</a>&#160;&#160;&#160;((<a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a>)0x00000001)</td></tr>
+<tr class="separator:ga3713a01c5fcd5f7eae46ff22ceaf6d02"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga6821ff6dd39dc2bc370ded760ad8b0cf"><td class="memItemLeft" align="right" valign="top">typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a></td></tr>
+<tr class="separator:ga6821ff6dd39dc2bc370ded760ad8b0cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga11e986351c65bd3dc3c0fe2cd9926e4b"><td class="memItemLeft" align="right" valign="top">typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">psa_key_id_t</a></td></tr>
+<tr class="separator:ga11e986351c65bd3dc3c0fe2cd9926e4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ga3713a01c5fcd5f7eae46ff22ceaf6d02"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_LIFETIME_PERSISTENT&#160;&#160;&#160;((<a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a>)0x00000001)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The default storage area for persistent keys.</p>
+<p>A persistent key remains in storage until it is explicitly destroyed or until the corresponding storage area is wiped. This specification does not define any mechanism to wipe a storage area, but implementations may provide their own mechanism (for example to perform a factory reset, to prepare for device refurbishment, or to uninstall an application).</p>
+<p>This lifetime value is the default storage area for the calling application. Implementations may offer other storage areas designated by other lifetime values as implementation-specific extensions. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga8b438870ba69489b685730d346455108"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_LIFETIME_VOLATILE&#160;&#160;&#160;((<a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a>)0x00000000)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>A volatile key only exists as long as the handle to it is not closed. The key material is guaranteed to be erased on a power reset. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ga11e986351c65bd3dc3c0fe2cd9926e4b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef uint32_t <a class="el" href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">psa_key_id_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Encoding of identifiers of persistent keys. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga6821ff6dd39dc2bc370ded760ad8b0cf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef uint32_t <a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Encoding of key lifetimes. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/group__key__management.html b/docs/html/group__key__management.html
new file mode 100644
index 0000000..1dd61f4
--- /dev/null
+++ b/docs/html/group__key__management.html
@@ -0,0 +1,330 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Key management</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Key management</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga1e4825ab59260aeb3bdbb3ff07210022"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__management.html#ga1e4825ab59260aeb3bdbb3ff07210022">psa_get_key_lifetime</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a> *lifetime)</td></tr>
+<tr class="memdesc:ga1e4825ab59260aeb3bdbb3ff07210022"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve the lifetime of an open key.  <a href="#ga1e4825ab59260aeb3bdbb3ff07210022">More...</a><br /></td></tr>
+<tr class="separator:ga1e4825ab59260aeb3bdbb3ff07210022"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga40094b77b7a42b9c8e158395113f1a35"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__management.html#ga40094b77b7a42b9c8e158395113f1a35">psa_allocate_key</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> *handle)</td></tr>
+<tr class="separator:ga40094b77b7a42b9c8e158395113f1a35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa9f1c848cf78b80fe2a7b18bb7ccec50"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__management.html#gaa9f1c848cf78b80fe2a7b18bb7ccec50">psa_open_key</a> (<a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a> lifetime, <a class="el" href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">psa_key_id_t</a> id, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> *handle)</td></tr>
+<tr class="separator:gaa9f1c848cf78b80fe2a7b18bb7ccec50"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4108f255d3eaa6d23a7a14b684af8d7c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__management.html#ga4108f255d3eaa6d23a7a14b684af8d7c">psa_create_key</a> (<a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a> lifetime, <a class="el" href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">psa_key_id_t</a> id, <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> *handle)</td></tr>
+<tr class="separator:ga4108f255d3eaa6d23a7a14b684af8d7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa09b720d299dfe6b9f41c36e448078eb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__key__management.html#gaa09b720d299dfe6b9f41c36e448078eb">psa_close_key</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle)</td></tr>
+<tr class="separator:gaa09b720d299dfe6b9f41c36e448078eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga40094b77b7a42b9c8e158395113f1a35"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_allocate_key </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> *&#160;</td>
+          <td class="paramname"><em>handle</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Allocate a key slot for a transient key, i.e. a key which is only stored in volatile memory.</p>
+<p>The allocated key slot and its handle remain valid until the application calls <a class="el" href="group__key__management.html#gaa09b720d299dfe6b9f41c36e448078eb">psa_close_key()</a> or <a class="el" href="group__import__export.html#ga165085fc1bc7a78b91792fdd94ae102c" title="Destroy a key. ">psa_destroy_key()</a> or until the application terminates.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">handle</td><td>On success, a handle to a volatile key slot.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. The application can now use the value of <code>*handle</code> to access the newly allocated key slot. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td>There was not enough memory, or the maximum number of key slots has been reached. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa09b720d299dfe6b9f41c36e448078eb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_close_key </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Close a key handle.</p>
+<p>If the handle designates a volatile key, destroy the key material and free all associated resources, just like <a class="el" href="group__import__export.html#ga165085fc1bc7a78b91792fdd94ae102c" title="Destroy a key. ">psa_destroy_key()</a>.</p>
+<p>If the handle designates a persistent key, free all resources associated with the key in volatile memory. The key slot in persistent storage is not affected and can be opened again later with <a class="el" href="group__key__management.html#gaa9f1c848cf78b80fe2a7b18bb7ccec50">psa_open_key()</a>.</p>
+<p>If the key is currently in use in a multipart operation, the multipart operation is aborted.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">handle</td><td>The key handle to close.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4108f255d3eaa6d23a7a14b684af8d7c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_create_key </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a>&#160;</td>
+          <td class="paramname"><em>lifetime</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">psa_key_id_t</a>&#160;</td>
+          <td class="paramname"><em>id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> *&#160;</td>
+          <td class="paramname"><em>handle</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create a new persistent key slot.</p>
+<p>Create a new persistent key slot and return a handle to it. The handle remains valid until the application calls <a class="el" href="group__key__management.html#gaa09b720d299dfe6b9f41c36e448078eb">psa_close_key()</a> or terminates. The application can open the key again with <a class="el" href="group__key__management.html#gaa9f1c848cf78b80fe2a7b18bb7ccec50">psa_open_key()</a> until it removes the key by calling <a class="el" href="group__import__export.html#ga165085fc1bc7a78b91792fdd94ae102c" title="Destroy a key. ">psa_destroy_key()</a>.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">lifetime</td><td>The lifetime of the key. This designates a storage area where the key material is stored. This must not be <a class="el" href="group__key__lifetimes.html#ga8b438870ba69489b685730d346455108">PSA_KEY_LIFETIME_VOLATILE</a>. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">id</td><td>The persistent identifier of the key. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">handle</td><td>On success, a handle to the newly created key slot. When key material is later created in this key slot, it will be saved to the specified persistent location.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. The application can now use the value of <code>*handle</code> to access the newly allocated key slot. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga897a45eb206a6f6b7be7ffbe36f0d766">PSA_ERROR_INSUFFICIENT_STORAGE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gac2fee3a51249fbea45360aaa911f3e58">PSA_ERROR_OCCUPIED_SLOT</a></td><td>There is already a key with the identifier <code>id</code> in the storage area designated by <code>lifetime</code>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>lifetime</code> is invalid, for example <a class="el" href="group__key__lifetimes.html#ga8b438870ba69489b685730d346455108">PSA_KEY_LIFETIME_VOLATILE</a>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>id</code> is invalid for the specified lifetime. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>lifetime</code> is not supported. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td><code>lifetime</code> is valid, but the application does not have the permission to create a key there. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1e4825ab59260aeb3bdbb3ff07210022"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_get_key_lifetime </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a> *&#160;</td>
+          <td class="paramname"><em>lifetime</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Retrieve the lifetime of an open key. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to query. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">lifetime</td><td>On success, the lifetime value.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa9f1c848cf78b80fe2a7b18bb7ccec50"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_open_key </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf">psa_key_lifetime_t</a>&#160;</td>
+          <td class="paramname"><em>lifetime</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b">psa_key_id_t</a>&#160;</td>
+          <td class="paramname"><em>id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> *&#160;</td>
+          <td class="paramname"><em>handle</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Open a handle to an existing persistent key.</p>
+<p>Open a handle to a key which was previously created with <a class="el" href="group__key__management.html#ga4108f255d3eaa6d23a7a14b684af8d7c">psa_create_key()</a>.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">lifetime</td><td>The lifetime of the key. This designates a storage area where the key material is stored. This must not be <a class="el" href="group__key__lifetimes.html#ga8b438870ba69489b685730d346455108">PSA_KEY_LIFETIME_VOLATILE</a>. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">id</td><td>The persistent identifier of the key. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">handle</td><td>On success, a handle to a key slot which contains the data and metadata loaded from the specified persistent location.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. The application can now use the value of <code>*handle</code> to access the newly allocated key slot. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>lifetime</code> is invalid, for example <a class="el" href="group__key__lifetimes.html#ga8b438870ba69489b685730d346455108">PSA_KEY_LIFETIME_VOLATILE</a>. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>id</code> is invalid for the specified lifetime. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>lifetime</code> is not supported. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td>The specified key exists, but the application does not have the permission to access it. Note that this specification does not define any way to create such a key, but it may be possible through implementation-specific means. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/group__platform.html b/docs/html/group__platform.html
new file mode 100644
index 0000000..a1ddf2a
--- /dev/null
+++ b/docs/html/group__platform.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Implementation-specific definitions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#typedef-members">Typedefs</a>  </div>
+  <div class="headertitle">
+<div class="title">Implementation-specific definitions</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gabf6d5fd4e2ea89ecd425c88f057e7f75"><td class="memItemLeft" align="right" valign="top">typedef _unsigned_integral_type_&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a></td></tr>
+<tr class="memdesc:gabf6d5fd4e2ea89ecd425c88f057e7f75"><td class="mdescLeft">&#160;</td><td class="mdescRight">Key handle.  <a href="#gabf6d5fd4e2ea89ecd425c88f057e7f75">More...</a><br /></td></tr>
+<tr class="separator:gabf6d5fd4e2ea89ecd425c88f057e7f75"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="gabf6d5fd4e2ea89ecd425c88f057e7f75"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef _unsigned_integral_type_ <a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Key handle. </p>
+<p>This type represents open handles to keys. It must be an unsigned integral type. The choice of type is implementation-dependent.</p>
+<p>0 is not a valid key handle. How other handle values are assigned is implementation-dependent. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/group__policy.html b/docs/html/group__policy.html
new file mode 100644
index 0000000..ee73daf
--- /dev/null
+++ b/docs/html/group__policy.html
@@ -0,0 +1,455 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Key policies</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Key policies</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga5e6bc5f550e88fdc7790f2a75e79f7c5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga5e6bc5f550e88fdc7790f2a75e79f7c5">PSA_KEY_POLICY_INIT</a>&#160;&#160;&#160;{0}</td></tr>
+<tr class="separator:ga5e6bc5f550e88fdc7790f2a75e79f7c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7dddccdd1303176e87a4d20c87b589ed"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga7dddccdd1303176e87a4d20c87b589ed">PSA_KEY_USAGE_EXPORT</a>&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000001)</td></tr>
+<tr class="separator:ga7dddccdd1303176e87a4d20c87b589ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga75153b296d045d529d97203a6a995dad"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga75153b296d045d529d97203a6a995dad">PSA_KEY_USAGE_ENCRYPT</a>&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000100)</td></tr>
+<tr class="separator:ga75153b296d045d529d97203a6a995dad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac3f2d2e5983db1edde9f142ca9bf8e6a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#gac3f2d2e5983db1edde9f142ca9bf8e6a">PSA_KEY_USAGE_DECRYPT</a>&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000200)</td></tr>
+<tr class="separator:gac3f2d2e5983db1edde9f142ca9bf8e6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga99b9f456cf59efc4b5579465407aef5a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga99b9f456cf59efc4b5579465407aef5a">PSA_KEY_USAGE_SIGN</a>&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000400)</td></tr>
+<tr class="separator:ga99b9f456cf59efc4b5579465407aef5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga39b54ffd5958b69634607924fa53cea6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga39b54ffd5958b69634607924fa53cea6">PSA_KEY_USAGE_VERIFY</a>&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000800)</td></tr>
+<tr class="separator:ga39b54ffd5958b69634607924fa53cea6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf19022acc5ef23cf12477f632b48a0b2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#gaf19022acc5ef23cf12477f632b48a0b2">PSA_KEY_USAGE_DERIVE</a>&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00001000)</td></tr>
+<tr class="separator:gaf19022acc5ef23cf12477f632b48a0b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gaf553efd409845b6d09ff25ce2ba36607"><td class="memItemLeft" align="right" valign="top">typedef struct psa_key_policy_s&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a></td></tr>
+<tr class="separator:gaf553efd409845b6d09ff25ce2ba36607"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7bb9de71337e0e98de843aa7f9b55f25"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7bb9de71337e0e98de843aa7f9b55f25"></a>
+typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a></td></tr>
+<tr class="memdesc:ga7bb9de71337e0e98de843aa7f9b55f25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encoding of permitted usage on a key. <br /></td></tr>
+<tr class="separator:ga7bb9de71337e0e98de843aa7f9b55f25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gac16792fd6d375a5f76d372090df40607"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#gac16792fd6d375a5f76d372090df40607">psa_key_policy_set_usage</a> (<a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *policy, <a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a> usage, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg)</td></tr>
+<tr class="memdesc:gac16792fd6d375a5f76d372090df40607"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the standard fields of a policy structure.  <a href="#gac16792fd6d375a5f76d372090df40607">More...</a><br /></td></tr>
+<tr class="separator:gac16792fd6d375a5f76d372090df40607"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7746662b7503e484774d0ecb5d8ac2ab"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga7746662b7503e484774d0ecb5d8ac2ab">psa_key_policy_get_usage</a> (const <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *policy)</td></tr>
+<tr class="memdesc:ga7746662b7503e484774d0ecb5d8ac2ab"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve the usage field of a policy structure.  <a href="#ga7746662b7503e484774d0ecb5d8ac2ab">More...</a><br /></td></tr>
+<tr class="separator:ga7746662b7503e484774d0ecb5d8ac2ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaadf16b89ace53e1d2cb5bcb0aef24c86"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#gaadf16b89ace53e1d2cb5bcb0aef24c86">psa_key_policy_get_algorithm</a> (const <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *policy)</td></tr>
+<tr class="memdesc:gaadf16b89ace53e1d2cb5bcb0aef24c86"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve the algorithm field of a policy structure.  <a href="#gaadf16b89ace53e1d2cb5bcb0aef24c86">More...</a><br /></td></tr>
+<tr class="separator:gaadf16b89ace53e1d2cb5bcb0aef24c86"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1e2a6e50b621864f95d438222a3c640b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#ga1e2a6e50b621864f95d438222a3c640b">psa_set_key_policy</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, const <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *policy)</td></tr>
+<tr class="memdesc:ga1e2a6e50b621864f95d438222a3c640b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the usage policy on a key slot.  <a href="#ga1e2a6e50b621864f95d438222a3c640b">More...</a><br /></td></tr>
+<tr class="separator:ga1e2a6e50b621864f95d438222a3c640b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaed087d1386b807edee66b2e445ba9111"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__policy.html#gaed087d1386b807edee66b2e445ba9111">psa_get_key_policy</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *policy)</td></tr>
+<tr class="memdesc:gaed087d1386b807edee66b2e445ba9111"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the usage policy for a key slot.  <a href="#gaed087d1386b807edee66b2e445ba9111">More...</a><br /></td></tr>
+<tr class="separator:gaed087d1386b807edee66b2e445ba9111"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ga5e6bc5f550e88fdc7790f2a75e79f7c5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_POLICY_INIT&#160;&#160;&#160;{0}</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>This macro returns a suitable initializer for a key policy object of type <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a>. </p>
+
+</div>
+</div>
+<a class="anchor" id="gac3f2d2e5983db1edde9f142ca9bf8e6a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_USAGE_DECRYPT&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000200)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the key may be used to decrypt a message.</p>
+<p>This flag allows the key to be used for a symmetric decryption operation, for an AEAD decryption-and-verification operation, or for an asymmetric decryption operation, if otherwise permitted by the key's type and policy.</p>
+<p>For a key pair, this concerns the private key. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaf19022acc5ef23cf12477f632b48a0b2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_USAGE_DERIVE&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00001000)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the key may be used to derive other keys. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga75153b296d045d529d97203a6a995dad"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_USAGE_ENCRYPT&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000100)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the key may be used to encrypt a message.</p>
+<p>This flag allows the key to be used for a symmetric encryption operation, for an AEAD encryption-and-authentication operation, or for an asymmetric encryption operation, if otherwise permitted by the key's type and policy.</p>
+<p>For a key pair, this concerns the public key. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga7dddccdd1303176e87a4d20c87b589ed"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_USAGE_EXPORT&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000001)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the key may be exported.</p>
+<p>A public key or the public part of a key pair may always be exported regardless of the value of this permission flag.</p>
+<p>If a key does not have export permission, implementations shall not allow the key to be exported in plain form from the cryptoprocessor, whether through <a class="el" href="group__import__export.html#ga902b9a7a6cf34d6111668be777b05eaf" title="Export a key in binary format. ">psa_export_key()</a> or through a proprietary interface. The key may however be exportable in a wrapped form, i.e. in a form where it is encrypted by another key. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga99b9f456cf59efc4b5579465407aef5a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_USAGE_SIGN&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000400)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the key may be used to sign a message.</p>
+<p>This flag allows the key to be used for a MAC calculation operation or for an asymmetric signature operation, if otherwise permitted by the key's type and policy.</p>
+<p>For a key pair, this concerns the private key. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga39b54ffd5958b69634607924fa53cea6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PSA_KEY_USAGE_VERIFY&#160;&#160;&#160;((<a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>)0x00000800)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Whether the key may be used to verify a message signature.</p>
+<p>This flag allows the key to be used for a MAC verification operation or for an asymmetric signature verification operation, if otherwise permitted by by the key's type and policy.</p>
+<p>For a key pair, this concerns the public key. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="gaf553efd409845b6d09ff25ce2ba36607"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct psa_key_policy_s <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>The type of the key policy data structure.</p>
+<p>Before calling any function on a key policy, the application must initialize it by any of the following means:</p><ul>
+<li>Set the structure to all-bits-zero, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_key_policy_t policy;</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;memset(&amp;policy, 0, sizeof(policy));</div></div><!-- fragment --></li>
+<li>Initialize the structure to logical zero values, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_key_policy_t policy = {0};</div></div><!-- fragment --></li>
+<li>Initialize the structure to the initializer <a class="el" href="group__policy.html#ga5e6bc5f550e88fdc7790f2a75e79f7c5">PSA_KEY_POLICY_INIT</a>, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_key_policy_t policy = PSA_KEY_POLICY_INIT;</div></div><!-- fragment --></li>
+<li>Assign the result of the function psa_key_policy_init() to the structure, for example: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;psa_key_policy_t policy;</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;policy = psa_key_policy_init();</div></div><!-- fragment --></li>
+</ul>
+<p>This is an implementation-defined <code>struct</code>. Applications should not make any assumptions about the content of this structure except as directed by the documentation of a specific implementation. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gaed087d1386b807edee66b2e445ba9111"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_get_key_policy </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *&#160;</td>
+          <td class="paramname"><em>policy</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the usage policy for a key slot. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key slot whose policy is being queried. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">policy</td><td>On success, the key's policy.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gaadf16b89ace53e1d2cb5bcb0aef24c86"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> psa_key_policy_get_algorithm </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *&#160;</td>
+          <td class="paramname"><em>policy</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Retrieve the algorithm field of a policy structure. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">policy</td><td>The policy object to query.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The permitted algorithm for a key with this policy. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7746662b7503e484774d0ecb5d8ac2ab"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a> psa_key_policy_get_usage </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *&#160;</td>
+          <td class="paramname"><em>policy</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Retrieve the usage field of a policy structure. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">policy</td><td>The policy object to query.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The permitted uses for a key with this policy. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac16792fd6d375a5f76d372090df40607"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void psa_key_policy_set_usage </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *&#160;</td>
+          <td class="paramname"><em>policy</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25">psa_key_usage_t</a>&#160;</td>
+          <td class="paramname"><em>usage</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
+          <td class="paramname"><em>alg</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set the standard fields of a policy structure. </p>
+<p>Note that this function does not make any consistency check of the parameters. The values are only checked when applying the policy to a key slot with <a class="el" href="group__policy.html#ga1e2a6e50b621864f95d438222a3c640b" title="Set the usage policy on a key slot. ">psa_set_key_policy()</a>.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">policy</td><td>The key policy to modify. It must have been initialized as per the documentation for <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a>. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">usage</td><td>The permitted uses for the key. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">alg</td><td>The algorithm that the key may be used for. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1e2a6e50b621864f95d438222a3c640b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_set_key_policy </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="group__policy.html#gaf553efd409845b6d09ff25ce2ba36607">psa_key_policy_t</a> *&#160;</td>
+          <td class="paramname"><em>policy</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set the usage policy on a key slot. </p>
+<p>This function must be called on an empty key slot, before importing, generating or creating a key in the slot. Changing the policy of an existing key is not permitted.</p>
+<p>Implementations may set restrictions on supported key policies depending on the key type and the key slot.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the key whose policy is to be changed. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">policy</td><td>The policy object to query.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. If the key is persistent, it is implementation-defined whether the policy has been saved to persistent storage. Implementations may defer saving the policy until the key material is created. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gac2fee3a51249fbea45360aaa911f3e58">PSA_ERROR_OCCUPIED_SLOT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/group__random.html b/docs/html/group__random.html
new file mode 100644
index 0000000..e405eba
--- /dev/null
+++ b/docs/html/group__random.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Random generation</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Random generation</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpsa__generate__key__extra__rsa.html">psa_generate_key_extra_rsa</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga1985eae417dfbccedf50d5fff54ea8c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__random.html#ga1985eae417dfbccedf50d5fff54ea8c5">psa_generate_random</a> (uint8_t *output, size_t output_size)</td></tr>
+<tr class="memdesc:ga1985eae417dfbccedf50d5fff54ea8c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate random bytes.  <a href="#ga1985eae417dfbccedf50d5fff54ea8c5">More...</a><br /></td></tr>
+<tr class="separator:ga1985eae417dfbccedf50d5fff54ea8c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga72921520494b4f007a3afb904cd9ecdd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__random.html#ga72921520494b4f007a3afb904cd9ecdd">psa_generate_key</a> (<a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a> handle, <a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a> type, size_t bits, const void *extra, size_t extra_size)</td></tr>
+<tr class="memdesc:ga72921520494b4f007a3afb904cd9ecdd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate a key or key pair.  <a href="#ga72921520494b4f007a3afb904cd9ecdd">More...</a><br /></td></tr>
+<tr class="separator:ga72921520494b4f007a3afb904cd9ecdd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga72921520494b4f007a3afb904cd9ecdd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_generate_key </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75">psa_key_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628">psa_key_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>bits</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>extra</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>extra_size</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Generate a key or key pair. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir"></td><td class="paramname">handle</td><td>Handle to the slot where the key will be stored. It must have been obtained by calling <a class="el" href="group__key__management.html#ga40094b77b7a42b9c8e158395113f1a35">psa_allocate_key()</a> or <a class="el" href="group__key__management.html#ga4108f255d3eaa6d23a7a14b684af8d7c">psa_create_key()</a> and must not contain key material yet. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">type</td><td>Key type (a <code>PSA_KEY_TYPE_XXX</code> value). </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">bits</td><td>Key size in bits. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">extra</td><td>Extra parameters for key generation. The interpretation of this parameter depends on <code>type</code>. All types support <code>NULL</code> to use default parameters. Implementation that support the generation of vendor-specific key types that allow extra parameters shall document the format of these extra parameters and the default values. For standard parameters, the meaning of <code>extra</code> is as follows:<ul>
+<li>For a symmetric key type (a type such that <a class="el" href="group__crypto__types.html#gab138ae2ebf2905dfbaf4154db2620939">PSA_KEY_TYPE_IS_ASYMMETRIC</a>(<code>type</code>) is false), <code>extra</code> must be <code>NULL</code>.</li>
+<li>For an elliptic curve key type (a type such that <a class="el" href="group__crypto__types.html#ga88e01fa06b585654689a99bcc06bbe66">PSA_KEY_TYPE_IS_ECC</a>(<code>type</code>) is false), <code>extra</code> must be <code>NULL</code>.</li>
+<li>For an RSA key (<code>type</code> is <a class="el" href="group__crypto__types.html#ga581f50687f5d650456925278948f2799">PSA_KEY_TYPE_RSA_KEYPAIR</a>), <code>extra</code> is an optional <a class="el" href="structpsa__generate__key__extra__rsa.html">psa_generate_key_extra_rsa</a> structure specifying the public exponent. The default public exponent used when <code>extra</code> is <code>NULL</code> is 65537.</li>
+<li>For an DSA key (<code>type</code> is <a class="el" href="group__crypto__types.html#ga011010ee28c20388f3d89fb27088ed62">PSA_KEY_TYPE_DSA_KEYPAIR</a>), <code>extra</code> is an optional structure specifying the key domain parameters. The key domain parameters can also be provided by <a class="el" href="group__import__export.html#ga091da8d3d39137fd6ad59f2b10234300" title="Set domain parameters for a key. ">psa_set_key_domain_parameters()</a>, which documents the format of the structure.</li>
+<li>For a DH key (<code>type</code> is <a class="el" href="group__crypto__types.html#ga39b63c6b97a62a316c0660bf72b2fdd5">PSA_KEY_TYPE_DH_KEYPAIR</a>), the <code>extra</code> is an optional structure specifying the key domain parameters. The key domain parameters can also be provided by <a class="el" href="group__import__export.html#ga091da8d3d39137fd6ad59f2b10234300" title="Set domain parameters for a key. ">psa_set_key_domain_parameters()</a>, which documents the format of the structure. </li>
+</ul>
+</td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">extra_size</td><td>Size of the buffer that <code>extra</code> points to, in bytes. Note that if <code>extra</code> is <code>NULL</code> then <code>extra_size</code> must be zero.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. If the key is persistent, the key material and the key's metadata have been saved to persistent storage. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gadf22718935657c2c3168c228204085f9">PSA_ERROR_INVALID_HANDLE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#gac2fee3a51249fbea45360aaa911f3e58">PSA_ERROR_OCCUPIED_SLOT</a></td><td>There is already a key in the specified slot. </td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4deb59fec02297ec5d8b42178323f675">PSA_ERROR_INSUFFICIENT_ENTROPY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1985eae417dfbccedf50d5fff54ea8c5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_generate_random </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>output</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>output_size</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Generate random bytes. </p>
+<dl class="section warning"><dt>Warning</dt><dd>This function <b>can</b> fail! Callers MUST check the return status and MUST NOT use the content of the output buffer if the return status is not <a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a>.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>To generate a key, use <a class="el" href="group__random.html#ga72921520494b4f007a3afb904cd9ecdd" title="Generate a key or key pair. ">psa_generate_key()</a> instead.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Output buffer for the generated data. </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname">output_size</td><td>Number of bytes to generate and output.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga4deb59fec02297ec5d8b42178323f675">PSA_ERROR_INSUFFICIENT_ENTROPY</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
+    <tr><td class="paramname"><a class="el" href="group__error.html#ga933d40fa2a591004f2e93aa91e11db84">PSA_ERROR_BAD_STATE</a></td><td>The library has not been previously initialized by <a class="el" href="group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9" title="Library initialization. ">psa_crypto_init()</a>. It is implementation-dependent whether a failure to initialize results in this error code. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/index.html b/docs/html/index.html
new file mode 100644
index 0000000..f096d3c
--- /dev/null
+++ b/docs/html/index.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Main Page</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li class="current"><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Platform Security Architecture — cryptography and keystore interface Documentation</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/jquery.js b/docs/html/jquery.js
new file mode 100644
index 0000000..d52a1c7
--- /dev/null
+++ b/docs/html/jquery.js
@@ -0,0 +1,68 @@
+/*
+ * jQuery JavaScript Library v1.7.1
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon Nov 21 21:11:03 2011 -0500
+ */
+(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?"":bO.call(b0)}:function(b0){return b0==null?"":b0.toString().replace(bI,"").replace(bE,"")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2==="string"||b2==="function"||b2==="regexp"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length==="number"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1==="number"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3==="string"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8==="object"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf("compatible")<0&&bS.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(b1,b0){bx["[object "+b0+"]"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test("\xA0")){bI=/^[\s\xA0]+/;bE=/[\s\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener("DOMContentLoaded",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState==="complete"){av.detachEvent("onreadystatechange",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll("left")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH==="array"){bE(bI)}else{if(bH==="function"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks("once memory"),bw=b.Callbacks("once memory"),bv=b.Callbacks("memory"),e="pending",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,"resolve"],fail:[bE,"reject"],progress:[bD,"notify"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+"With"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+"With"]=bA[bz].fireWith}bB.done(function(){e="resolved"},bw.disable,bv.lock).fail(function(){e="rejected"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement("div"),bH=av.documentElement;bv.setAttribute("className","t");bv.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="<div "+e+"><div></div></div><table "+e+" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="<div style='width:4px;'></div>";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute("classid")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by==="undefined"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf("data-")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],"parsedAttrs",true)}}return bz}else{if(typeof by==="object"){return this.each(function(){b.data(this,by)})}}bB=by.split(".");bB[1]=bB[1]?"."+bB[1]:"";if(bA===L){bz=this.triggerHandler("getData"+bB[1]+"!",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler("setData"+bB[1]+"!",bD);b.data(this,by,bA);bC.triggerHandler("changeData"+bB[1]+"!",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bi(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bi(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){if(typeof e!=="string"){bv=e;e="fx"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e==="fx"&&bw[0]!=="inprogress"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||"fx";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(bD,bw){if(typeof bD!=="string"){bw=bD;bD=L}bD=bD||"fx";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+"defer",bA=bD+"queue",bC=bD+"mark",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks("once memory"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\n\t\r]/g,af=/\s+/,aU=/\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=" "+bx.className+" ";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(" "+bA[bB]+" ")){bz+=bA[bB]+" "}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz==="string")||bz===L){bA=(bz||"").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(" "+by.className+" ").replace(aP," ");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(" "+bA[bB]+" "," ")}by.className=b.trim(bx)}else{by.className=""}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv==="boolean";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw==="string"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?"addClass":"removeClass"](bA)}}else{if(bw==="undefined"||bw==="boolean"){if(this.className){b._data(this,"__className__",this.className)}this.className=this.className||bx===false?"":b._data(this,"__className__")||""}}})},hasClass:function(e){var bx=" "+e+" ",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(" "+this[bw].className+" ").replace(aP," ").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute("disabled")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,"optgroup"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find("option").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,"");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error("type property can't be changed")}else{if(!b.support.radioValue&&bv==="radio"&&b.nodeName(e,"input")){var bw=e.value;e.setAttribute("type",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,"button")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,"button")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&"set" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&"get" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!=="boolean"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!=="":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+"")}};b.attrHooks.tabindex.set=be.set;b.each(["width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===""){bw.setAttribute(e,"auto");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===""){bw="false"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each(["href","src","width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=""+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype="encoding"}if(!b.support.checkOn){b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||"").split(".").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(".")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent("on"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||"")).split(" ");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp("(^|\\.)"+bC.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH==="**"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,["events","handle"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf("!")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,"events")||{})[bv.type]&&b._data(bH,"handle");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG==="click"&&b.nodeName(bA,"a"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!=="focus"&&bG!=="blur")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,"events")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type==="click")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent("on"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,"form")){return false}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,"form")){return false}b.event.remove(this,"._submit")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){b.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});b.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate("change",this,e,true)}})}return false}b.event.add(this,"beforeactivate._change",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate("change",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,"._change");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:"focusin",blur:"focusout"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw==="object"){if(typeof e!=="string"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e==="string"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+"."+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw==="object"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e==="function"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||"**",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,"**"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,"lastToggle"+bx.guid)||0)%bw;b._data(this,"lastToggle"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each(("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu").split(" "),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}});
+/*
+ * Sizzle CSS Selector Engine
+ *  Copyright 2011, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!=="\\"){bT[1]=(bT[1]||"").replace(bK,"");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],"");break}}}}if(!bW){bW=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)==="\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],"");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR="";if(e){if(e===1||e===9){if(typeof bU.textContent==="string"){return bU.textContent}else{if(typeof bU.innerText==="string"){return bU.innerText.replace(bO,"")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(bW,bR){var bT=typeof bR==="string",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},">":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},"":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("parentNode",bR,bS,bT,bU,bV)},"~":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("previousSibling",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!=="undefined"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!=="undefined"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute("name")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!=="undefined"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=" "+bT[1].replace(bK,"")+" ";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(" "+bV.className+" ").replace(/[\t\n\r]/g," ").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case"only":case"first":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX==="first"){return true}bR=bS;case"last":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case"nth":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement("div"),bS="script"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML="<a name='"+bS+"'/>";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="<p class='TEST'></p>";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!=="string"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[":"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!=="string"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack("","find",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),"not",e)},filter:function(e){return this.pushStack(aG(this,e,true),"filter",e)},is:function(e){return !!e&&(typeof e==="string"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!=="string"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/<tbody/i,W=/<|&#?\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp("<(?:"+aR+")","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bm=/\/(java|ecma)script/i,aN=/^\s*<!(?:\[CDATA\[|\-\-)/,ax={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div<div>","</div>"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1></$2>");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName("*"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!=="string"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),"replaceWith",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC==="string"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,"tr");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?".":"")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw==="object"){e.outerHTML=bv.outerHTML}else{if(bw==="input"&&(bv.type==="checkbox"||bv.type==="radio")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw==="option"){e.selected=bv.defaultSelected}else{if(bw==="input"||bw==="textarea"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB==="string"&&bB.length<512&&bA===av&&bB.charAt(0)==="<"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1></$2>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]==="<table>"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],"script")&&(!bI[bE].type||bI[bE].type.toLowerCase()==="text/javascript")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName("script"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:"script"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||"").replace(aN,"/*$0*/"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\([^)]*\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\d+(?:px)?$/i,bn=/^-?\d/,I=/^([\-+])=([\-+.\de]+)/,a7={position:"absolute",visibility:"hidden",display:"block"},an=["Left","Right"],a1=["Top","Bottom"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity","opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each(["height","width"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,"padding"+bz[bx]))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}}}return bA+"px"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,"padding"+bz[bx]))||0;if(bv!=="padding"){bA+=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+"px"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a6=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\+/.test(bv);if(bC){bv=bv.substr(1)||"*"}bB=e[bv]=e[bv]||[];bB[bC?"unshift":"push"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC==="string"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx["*"]){bC=aW(bv,bE,bz,bD,"*",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!=="string"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(" ");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("<div>").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE==="string"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC==="*"){bC=bx}else{if(bx!=="*"&&bx!==bC){by=bx+" "+bC;bF=bG[by]||bG["* "+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(" ");if(bB[0]===bx||bB[0]==="*"){e=bG[bB[1]+" "+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error("No conversion from "+by.replace(" "," to "))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\=)\?(&|$)|\?\?/i;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return b.expando+"_"+(aC++)}});b.ajaxPrefilter("json jsonp",function(bD,bA,bC){var bx=bD.contentType==="application/x-www-form-urlencoded"&&(typeof bD.data==="string");if(bD.dataTypes[0]==="jsonp"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv="$1"+bw+"$2";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\?/.test(e)?"&":"?")+bD.jsonp+"="+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters["script json"]=function(){if(!bB){b.error(bw+" was not called")}return bB[0]};bD.dataTypes[0]="json";return"script"}});b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter("script",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});b.ajaxTransport("script",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName("head")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement("script");e.async="async";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,"success")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject("Microsoft.XMLHTTP")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB["X-Requested-With"]){bB["X-Requested-With"]="XMLHttpRequest"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=""}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,a3,aH=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0("show",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,"olddisplay")&&by==="none"){by=bw.style.display=""}if(by===""&&b.css(bw,"display")==="none"){b._data(bw,"olddisplay",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===""||by==="none"){bw.style.display=b._data(bw,"olddisplay")||""}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0("hide",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,"display");if(by!=="none"&&!b._data(bw,"olddisplay")){b._data(bw,"olddisplay",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display="none"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw==="boolean";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(":hidden");b(this)[by?"show":"hide"]()})}else{this.animate(a0("toggle",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(":hidden"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||"swing"}if(bF==="hide"&&bI||bF==="show"&&!bI){return bE.complete.call(this)}if(bK&&(bB==="height"||bB==="width")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,"display")==="inline"&&b.css(this,"float")==="none"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)==="inline"){this.style.display="inline-block"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow="hidden"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,"toggle"+bD)||(bF==="toggle"?bI?"show":"hide":0);if(bA){b._data(this,"toggle"+bD,bA==="show"?"hide":"show");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?"":"px");if(bL!=="px"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]==="-="?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,"")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!=="string"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||"fx",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(".run")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+".run"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0("show",1),slideUp:a0("hide",1),slideToggle:a0("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw==="object"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv==="auto"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?"":"px");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,"fxshow"+e.prop)===L){b._data(e.elem,"fxshow"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,"fxshow"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,"opacity",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each(["width","height"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*
+ * jQuery UI 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h<j.length;h++){if(e.options[j[h][0]]){j[h][1].apply(e.element,f)}}}},contains:function(f,e){return document.compareDocumentPosition?f.compareDocumentPosition(e)&16:f!==e&&f.contains(e)},hasScroll:function(h,f){if(a(h).css("overflow")==="hidden"){return false}var e=(f&&f==="left")?"scrollLeft":"scrollTop",g=false;if(h[e]>0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*
+ * jQuery UI Widget 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*
+ * jQuery UI Mouse 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ *	jquery.ui.widget.js
+ */
+(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e="ui-resizable-"+j;var h=c('<div class="ui-resizable-handle '+e+'"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e=="sw"){h.left=j.left+(f.width-h.width);h.top=null}if(e=="nw"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css("borderTopWidth"),h.css("borderRightWidth"),h.css("borderBottomWidth"),h.css("borderLeftWidth")],j=[h.css("paddingTop"),h.css("paddingRight"),h.css("paddingBottom"),h.css("paddingLeft")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(":hidden")||c(g).parents(":hidden").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*
+ * jQuery hashchange event - v1.3 - 7/21/2010
+ * http://benalman.com/projects/jquery-hashchange-plugin/
+ * 
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:"xy",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode=="BackCompat"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e=="object"){d=e;e=0}if(typeof d=="function"){d={onAfter:d}}if(f=="max"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is("html,body");switch(typeof k){case"number":case"string":if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case"object":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(""),function(q,r){var s=r=="x"?"Left":"Top",u=s.toLowerCase(),p="scroll"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css("margin"+s))||0;g[p]-=parseInt(k.css("border"+s+"Width"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r=="x"?"width":"height"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)=="%"?parseFloat(t)/100*n:t}if(/^\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i=="x"?"Width":"Height",e="scroll"+h;if(!c(j).is("html,body")){return j[e]-c(j)[h.toLowerCase()]()}var g="client"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d=="object"?d:{top:d,left:d}}})(jQuery);/*
+ PowerTip - v1.2.0 - 2013-04-03
+ http://stevenbenner.github.com/jquery-powertip/
+ Copyright (c) 2013 Steven Benner (http://stevenbenner.com/).
+ Released under MIT license.
+ https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
+*/
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)==="string"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr("title");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr("title")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({"mouseenter.powertip":function J(P){k.powerTip.show(this,P)},"mouseleave.powertip":function L(){k.powerTip.hide(this)},"focus.powertip":function K(){k.powerTip.show(this)},"blur.powertip":function H(){k.powerTip.hide(this,true)},"keydown.powertip":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(".powertip").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr("title",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top="auto";F.left="auto";F.right="auto";F.bottom="auto";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split("-")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case"n":N.set("left",I.left-(J/2));N.set("bottom",c.windowHeight-I.top+P);break;case"e":N.set("left",I.left+P);N.set("top",I.top-(O/2));break;case"s":N.set("left",I.left-(J/2));N.set("top",I.top+P);break;case"w":N.set("top",I.top-(O/2));N.set("right",c.windowWidth-I.left+P);break;case"nw":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"nw-alt":N.set("left",I.left);N.set("bottom",c.windowHeight-I.top+P);break;case"ne":N.set("left",I.left-20);N.set("bottom",c.windowHeight-I.top+P);break;case"ne-alt":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left);break;case"sw":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"sw-alt":N.set("left",I.left);N.set("top",I.top+P);break;case"se":N.set("left",I.left-20);N.set("top",I.top+P);break;case"se-alt":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case"n":M=O.left+N/2;L=O.top;break;case"e":M=O.left+N;L=O.top+I/2;break;case"s":M=O.left+N/2;L=O.top+I;break;case"w":M=O.left;L=O.top+I/2;break;case"nw":M=O.left;L=O.top;break;case"ne":M=O.left+N;L=O.top;break;case"sw":M=O.left;L=O.top+I;break;case"se":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest("svg")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=["nw","n","ne","e","se","s","sw","w"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k("#"+Q.popupId);if(O.length===0){O=k("<div/>",{id:Q.popupId});if(w.length===0){w=k("body")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on("mousemove",M);s.on("scroll",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger("powerTipPreRender");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger("powerTipRender");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger("powerTipOpen")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set("top",c.currentY+Q.offset);T.set("left",c.currentX+Q.offset);O.css(T);R.trigger("powerTipClose")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set("top",c.currentY+Q.offset);U.set("left",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set("left",c.windowWidth-R)}else{if(S===p.bottom){U.set("top",c.scrollTop+c.windowHeight-V)}}}else{U.set("left",c.currentX-R-Q.offset);U.set("top",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set("top",0);V.set("left",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(":disabled")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(":focus")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on("mousemove",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k("#"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}}));
\ No newline at end of file
diff --git a/docs/html/modules.html b/docs/html/modules.html
new file mode 100644
index 0000000..0d2051e
--- /dev/null
+++ b/docs/html/modules.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Modules</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Modules</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all modules:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__platform.html" target="_self">Implementation-specific definitions</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__initialization.html" target="_self">Library initialization</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__policy.html" target="_self">Key policies</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__key__management.html" target="_self">Key management</a></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__import__export.html" target="_self">Key import and export</a></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__hash.html" target="_self">Message digests</a></td><td class="desc"></td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__MAC.html" target="_self">Message authentication codes</a></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__cipher.html" target="_self">Symmetric ciphers</a></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__aead.html" target="_self">Authenticated encryption with associated data (AEAD)</a></td><td class="desc"></td></tr>
+<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__asymmetric.html" target="_self">Asymmetric cryptography</a></td><td class="desc"></td></tr>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__generators.html" target="_self">Generators</a></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__derivation.html" target="_self">Key derivation</a></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__random.html" target="_self">Random generation</a></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__error.html" target="_self">Error codes</a></td><td class="desc"></td></tr>
+<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__crypto__types.html" target="_self">Key and algorithm types</a></td><td class="desc"></td></tr>
+<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__key__lifetimes.html" target="_self">Key lifetimes</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/nav_f.png b/docs/html/nav_f.png
new file mode 100644
index 0000000..72a58a5
--- /dev/null
+++ b/docs/html/nav_f.png
Binary files differ
diff --git a/docs/html/nav_g.png b/docs/html/nav_g.png
new file mode 100644
index 0000000..2093a23
--- /dev/null
+++ b/docs/html/nav_g.png
Binary files differ
diff --git a/docs/html/nav_h.png b/docs/html/nav_h.png
new file mode 100644
index 0000000..33389b1
--- /dev/null
+++ b/docs/html/nav_h.png
Binary files differ
diff --git a/docs/html/open.png b/docs/html/open.png
new file mode 100644
index 0000000..30f75c7
--- /dev/null
+++ b/docs/html/open.png
Binary files differ
diff --git a/docs/html/search/all_0.html b/docs/html/search/all_0.html
new file mode 100644
index 0000000..d54e0bd
--- /dev/null
+++ b/docs/html/search/all_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_0.js b/docs/html/search/all_0.js
new file mode 100644
index 0000000..9e9cdcb
--- /dev/null
+++ b/docs/html/search/all_0.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['authenticated_20encryption_20with_20associated_20data_20_28aead_29',['Authenticated encryption with associated data (AEAD)',['../group__aead.html',1,'']]],
+  ['asymmetric_20cryptography',['Asymmetric cryptography',['../group__asymmetric.html',1,'']]]
+];
diff --git a/docs/html/search/all_1.html b/docs/html/search/all_1.html
new file mode 100644
index 0000000..8cc6a1d
--- /dev/null
+++ b/docs/html/search/all_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_1.js b/docs/html/search/all_1.js
new file mode 100644
index 0000000..1f9a5bb
--- /dev/null
+++ b/docs/html/search/all_1.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+  ['crypto_2eh',['crypto.h',['../crypto_8h.html',1,'']]],
+  ['crypto_5fsizes_2eh',['crypto_sizes.h',['../crypto__sizes_8h.html',1,'']]],
+  ['crypto_5ftypes_2eh',['crypto_types.h',['../crypto__types_8h.html',1,'']]],
+  ['crypto_5fvalues_2eh',['crypto_values.h',['../crypto__values_8h.html',1,'']]]
+];
diff --git a/docs/html/search/all_2.html b/docs/html/search/all_2.html
new file mode 100644
index 0000000..d15ac65
--- /dev/null
+++ b/docs/html/search/all_2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_2.js b/docs/html/search/all_2.js
new file mode 100644
index 0000000..da175df
--- /dev/null
+++ b/docs/html/search/all_2.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['e',['e',['../structpsa__generate__key__extra__rsa.html#a53ccb9e4375f3c9af6e3ecfe111ce11d',1,'psa_generate_key_extra_rsa']]],
+  ['error_20codes',['Error codes',['../group__error.html',1,'']]]
+];
diff --git a/docs/html/search/all_3.html b/docs/html/search/all_3.html
new file mode 100644
index 0000000..9f526c6
--- /dev/null
+++ b/docs/html/search/all_3.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js
new file mode 100644
index 0000000..bb51584
--- /dev/null
+++ b/docs/html/search/all_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['generators',['Generators',['../group__generators.html',1,'']]]
+];
diff --git a/docs/html/search/all_4.html b/docs/html/search/all_4.html
new file mode 100644
index 0000000..7b814aa
--- /dev/null
+++ b/docs/html/search/all_4.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js
new file mode 100644
index 0000000..f48be25
--- /dev/null
+++ b/docs/html/search/all_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['implementation_2dspecific_20definitions',['Implementation-specific definitions',['../group__platform.html',1,'']]]
+];
diff --git a/docs/html/search/all_5.html b/docs/html/search/all_5.html
new file mode 100644
index 0000000..d8de556
--- /dev/null
+++ b/docs/html/search/all_5.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_5.js b/docs/html/search/all_5.js
new file mode 100644
index 0000000..489c5ec
--- /dev/null
+++ b/docs/html/search/all_5.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+  ['key_20and_20algorithm_20types',['Key and algorithm types',['../group__crypto__types.html',1,'']]],
+  ['key_20derivation',['Key derivation',['../group__derivation.html',1,'']]],
+  ['key_20import_20and_20export',['Key import and export',['../group__import__export.html',1,'']]],
+  ['key_20lifetimes',['Key lifetimes',['../group__key__lifetimes.html',1,'']]],
+  ['key_20management',['Key management',['../group__key__management.html',1,'']]],
+  ['key_20policies',['Key policies',['../group__policy.html',1,'']]]
+];
diff --git a/docs/html/search/all_6.html b/docs/html/search/all_6.html
new file mode 100644
index 0000000..9ba0cc2
--- /dev/null
+++ b/docs/html/search/all_6.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_6.js b/docs/html/search/all_6.js
new file mode 100644
index 0000000..c72a68d
--- /dev/null
+++ b/docs/html/search/all_6.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['library_20initialization',['Library initialization',['../group__initialization.html',1,'']]]
+];
diff --git a/docs/html/search/all_7.html b/docs/html/search/all_7.html
new file mode 100644
index 0000000..9384ec9
--- /dev/null
+++ b/docs/html/search/all_7.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js
new file mode 100644
index 0000000..6efdddb
--- /dev/null
+++ b/docs/html/search/all_7.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['message_20digests',['Message digests',['../group__hash.html',1,'']]],
+  ['message_20authentication_20codes',['Message authentication codes',['../group__MAC.html',1,'']]]
+];
diff --git a/docs/html/search/all_8.html b/docs/html/search/all_8.html
new file mode 100644
index 0000000..37566c5
--- /dev/null
+++ b/docs/html/search/all_8.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js
new file mode 100644
index 0000000..0e9f4ce
--- /dev/null
+++ b/docs/html/search/all_8.js
@@ -0,0 +1,235 @@
+var searchData=
+[
+  ['psa_5faead_5fabort',['psa_aead_abort',['../group__aead.html#gae8a5f93d92318c8f592ee9fbb9d36ba0',1,'crypto.h']]],
+  ['psa_5faead_5fdecrypt',['psa_aead_decrypt',['../group__aead.html#gaa8ce6527f2e227f1071fadbf2099793b',1,'crypto.h']]],
+  ['psa_5faead_5fdecrypt_5foutput_5fsize',['PSA_AEAD_DECRYPT_OUTPUT_SIZE',['../crypto__sizes_8h.html#a1d057796166c16eb673ad1997e48a60b',1,'crypto_sizes.h']]],
+  ['psa_5faead_5fdecrypt_5fsetup',['psa_aead_decrypt_setup',['../group__aead.html#ga439896519d4a367ec86b47f201884152',1,'crypto.h']]],
+  ['psa_5faead_5fencrypt',['psa_aead_encrypt',['../group__aead.html#ga44de092cf58bb6c820c5c80a6c51610d',1,'crypto.h']]],
+  ['psa_5faead_5fencrypt_5foutput_5fsize',['PSA_AEAD_ENCRYPT_OUTPUT_SIZE',['../crypto__sizes_8h.html#a85667d47a7aa6c7b99a80e5273671266',1,'crypto_sizes.h']]],
+  ['psa_5faead_5fencrypt_5fsetup',['psa_aead_encrypt_setup',['../group__aead.html#ga47265dc4852f1476f852752218fd12b2',1,'crypto.h']]],
+  ['psa_5faead_5ffinish',['psa_aead_finish',['../group__aead.html#ga759791bbe1763b377c3b5447641f1fc8',1,'crypto.h']]],
+  ['psa_5faead_5ffinish_5foutput_5fsize',['PSA_AEAD_FINISH_OUTPUT_SIZE',['../crypto__sizes_8h.html#af45d92c1d7ef43822b8df21ab1117d3f',1,'crypto_sizes.h']]],
+  ['psa_5faead_5fgenerate_5fnonce',['psa_aead_generate_nonce',['../group__aead.html#ga3eadcf2a29f662129ea4fb3454969ba2',1,'crypto.h']]],
+  ['psa_5faead_5foperation_5finit',['PSA_AEAD_OPERATION_INIT',['../group__aead.html#gaf52e036794c0dc6fbadd93a2b990f366',1,'crypto.h']]],
+  ['psa_5faead_5foperation_5ft',['psa_aead_operation_t',['../group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed',1,'crypto.h']]],
+  ['psa_5faead_5fset_5flengths',['psa_aead_set_lengths',['../group__aead.html#gad3431e28d05002c2a7b0760610176050',1,'crypto.h']]],
+  ['psa_5faead_5fset_5fnonce',['psa_aead_set_nonce',['../group__aead.html#ga40641d0721ca7fe01bbcd9ef635fbc46',1,'crypto.h']]],
+  ['psa_5faead_5ftag_5flength',['PSA_AEAD_TAG_LENGTH',['../crypto__sizes_8h.html#a8e3079b2e624cb8d32b94843cddada49',1,'crypto_sizes.h']]],
+  ['psa_5faead_5fupdate',['psa_aead_update',['../group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c',1,'crypto.h']]],
+  ['psa_5faead_5fupdate_5fad',['psa_aead_update_ad',['../group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569',1,'crypto.h']]],
+  ['psa_5faead_5fverify',['psa_aead_verify',['../group__aead.html#gaaed211fc61977c859d6ff07f39f59219',1,'crypto.h']]],
+  ['psa_5falg_5faead_5fwith_5fdefault_5ftag_5flength',['PSA_ALG_AEAD_WITH_DEFAULT_TAG_LENGTH',['../group__crypto__types.html#gaddea507e062250cda8a29407a9480d2b',1,'crypto_values.h']]],
+  ['psa_5falg_5faead_5fwith_5ftag_5flength',['PSA_ALG_AEAD_WITH_TAG_LENGTH',['../group__crypto__types.html#gaa63c520b62ab001d54d28801742fc9db',1,'crypto_values.h']]],
+  ['psa_5falg_5fany_5fhash',['PSA_ALG_ANY_HASH',['../group__crypto__types.html#gaa1288ea8bd397a8a3f5e19e94110f2e4',1,'crypto_values.h']]],
+  ['psa_5falg_5farc4',['PSA_ALG_ARC4',['../group__crypto__types.html#gab6a5284decb0e5e1b5b8740a41ef3c5e',1,'crypto_values.h']]],
+  ['psa_5falg_5fcbc_5fno_5fpadding',['PSA_ALG_CBC_NO_PADDING',['../group__crypto__types.html#gacb332d72716958880ee7f97d8365ae66',1,'crypto_values.h']]],
+  ['psa_5falg_5fcbc_5fpkcs7',['PSA_ALG_CBC_PKCS7',['../group__crypto__types.html#gaef50d2e9716eb6d476046608e4e0c78c',1,'crypto_values.h']]],
+  ['psa_5falg_5fctr',['PSA_ALG_CTR',['../group__crypto__types.html#gad318309706a769cffdc64e4c7e06b2e9',1,'crypto_values.h']]],
+  ['psa_5falg_5fdeterministic_5fecdsa',['PSA_ALG_DETERMINISTIC_ECDSA',['../group__crypto__types.html#ga11da566bcd341661c8de921e2ca5ed03',1,'crypto_values.h']]],
+  ['psa_5falg_5fdsa',['PSA_ALG_DSA',['../group__crypto__types.html#ga9a68efdddff5ae95f104a1416b12742e',1,'crypto_values.h']]],
+  ['psa_5falg_5fecdh',['PSA_ALG_ECDH',['../group__crypto__types.html#gab2dbcf71b63785e7dd7b54a100edee43',1,'crypto_values.h']]],
+  ['psa_5falg_5fecdsa',['PSA_ALG_ECDSA',['../group__crypto__types.html#ga7e3ce9f514a227d5ba5d8318870452e3',1,'crypto_values.h']]],
+  ['psa_5falg_5fecdsa_5fany',['PSA_ALG_ECDSA_ANY',['../group__crypto__types.html#ga51d6b6044a62e33cae0cf64bfc3b22a4',1,'crypto_values.h']]],
+  ['psa_5falg_5fffdh',['PSA_ALG_FFDH',['../group__crypto__types.html#ga0ebbb6f93a05b6511e6f108ffd2d1eb4',1,'crypto_values.h']]],
+  ['psa_5falg_5ffull_5flength_5fmac',['PSA_ALG_FULL_LENGTH_MAC',['../group__crypto__types.html#gaa05a8d99634f3350597ac9284fb70cb1',1,'crypto_values.h']]],
+  ['psa_5falg_5fhkdf',['PSA_ALG_HKDF',['../group__crypto__types.html#ga32a888fb360e6e25cab8a343772c4a82',1,'crypto_values.h']]],
+  ['psa_5falg_5fhmac',['PSA_ALG_HMAC',['../group__crypto__types.html#ga70f397425684b3efcde1e0e34c28261f',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5faead',['PSA_ALG_IS_AEAD',['../group__crypto__types.html#ga1d44829d60065eaa4ac9a703e7d6abc8',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5fasymmetric_5fencryption',['PSA_ALG_IS_ASYMMETRIC_ENCRYPTION',['../group__crypto__types.html#ga41d2ee937d54efd76bd54a97b2ebc08a',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5fblock_5fcipher_5fmac',['PSA_ALG_IS_BLOCK_CIPHER_MAC',['../group__crypto__types.html#gae49d1eb601125d65a5c5b252aa45479e',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5fcipher',['PSA_ALG_IS_CIPHER',['../group__crypto__types.html#ga1d1a5a402ad89a2e68f12bfb535490eb',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5fecdh',['PSA_ALG_IS_ECDH',['../group__crypto__types.html#ga9d9b6533d2a6bea7bac7ae01facb820d',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5fffdh',['PSA_ALG_IS_FFDH',['../group__crypto__types.html#gaa3cf76164cd9375af4fb8a291078a19e',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5fhash',['PSA_ALG_IS_HASH',['../group__crypto__types.html#gac9280662bb482590b4b33d1dcd32930f',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5fhash_5fand_5fsign',['PSA_ALG_IS_HASH_AND_SIGN',['../group__crypto__types.html#gad8a8ea0536975363b66410cdeafe38b6',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5fhkdf',['PSA_ALG_IS_HKDF',['../group__crypto__types.html#ga1979d0a76fcee6164cf2e65960f38db2',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5fhmac',['PSA_ALG_IS_HMAC',['../group__crypto__types.html#ga4a050c3c3cbc6eb96418f18847601c8a',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5fkey_5fagreement',['PSA_ALG_IS_KEY_AGREEMENT',['../group__crypto__types.html#ga59753742cb06553bd22751bbef472b6f',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5fkey_5fderivation',['PSA_ALG_IS_KEY_DERIVATION',['../group__crypto__types.html#gaf8b90c648aa53dbd06c236695e300cd0',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5fkey_5fselection',['PSA_ALG_IS_KEY_SELECTION',['../group__crypto__types.html#ga51b1834ee5e98c6a83c2cfc7699f9077',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5fmac',['PSA_ALG_IS_MAC',['../group__crypto__types.html#gaca7aee4c9dde316b3b1a150a26eab776',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5fsign',['PSA_ALG_IS_SIGN',['../group__crypto__types.html#ga6d490d0904e0698f6c1268a89d72ff31',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5fstream_5fcipher',['PSA_ALG_IS_STREAM_CIPHER',['../group__crypto__types.html#gacfec68e0c6175e02e1b2ebc97df383c0',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5ftls12_5fprf',['PSA_ALG_IS_TLS12_PRF',['../group__crypto__types.html#gaa3c18890c50222e5219f40ade8927e66',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5ftls12_5fpsk_5fto_5fms',['PSA_ALG_IS_TLS12_PSK_TO_MS',['../group__crypto__types.html#gab25ecc074a93fd11069bedfbba5a287b',1,'crypto_values.h']]],
+  ['psa_5falg_5fis_5fwildcard',['PSA_ALG_IS_WILDCARD',['../group__crypto__types.html#gacf83d7430e82b97cecb8b26ca6fa1426',1,'PSA_ALG_IS_WILDCARD():&#160;crypto_values.h'],['../group__crypto__types.html#gacf83d7430e82b97cecb8b26ca6fa1426',1,'PSA_ALG_IS_WILDCARD():&#160;crypto_values.h']]],
+  ['psa_5falg_5fkey_5fagreement',['PSA_ALG_KEY_AGREEMENT',['../group__crypto__types.html#ga78bb81cffb87a635c247725eeb2a2682',1,'crypto_values.h']]],
+  ['psa_5falg_5frsa_5foaep',['PSA_ALG_RSA_OAEP',['../group__crypto__types.html#gaa1235dc3fdd9839c6c1b1a9857344c76',1,'crypto_values.h']]],
+  ['psa_5falg_5frsa_5fpkcs1v15_5fcrypt',['PSA_ALG_RSA_PKCS1V15_CRYPT',['../group__crypto__types.html#ga4c540d3abe43fb9abcb94f2bc51acef9',1,'crypto_values.h']]],
+  ['psa_5falg_5frsa_5fpkcs1v15_5fsign',['PSA_ALG_RSA_PKCS1V15_SIGN',['../group__crypto__types.html#ga702ff75385a6ae7d4247033f479439af',1,'crypto_values.h']]],
+  ['psa_5falg_5frsa_5fpkcs1v15_5fsign_5fraw',['PSA_ALG_RSA_PKCS1V15_SIGN_RAW',['../group__crypto__types.html#ga4215e2a78dcf834e9a625927faa2a817',1,'crypto_values.h']]],
+  ['psa_5falg_5frsa_5fpss',['PSA_ALG_RSA_PSS',['../group__crypto__types.html#ga62152bf4cb4bf6aace5e1be8f143564d',1,'crypto_values.h']]],
+  ['psa_5falg_5fsha3_5f224',['PSA_ALG_SHA3_224',['../group__crypto__types.html#ga16f5fe34ccce68c2fada1224c054a999',1,'crypto_values.h']]],
+  ['psa_5falg_5fsha3_5f256',['PSA_ALG_SHA3_256',['../group__crypto__types.html#gaace70d9515489bbe3c5e7ac1b7d9155b',1,'crypto_values.h']]],
+  ['psa_5falg_5fsha3_5f384',['PSA_ALG_SHA3_384',['../group__crypto__types.html#gab0f079257ea75e2acfe2fc3b38c78cd8',1,'crypto_values.h']]],
+  ['psa_5falg_5fsha3_5f512',['PSA_ALG_SHA3_512',['../group__crypto__types.html#ga37e5dbe936dddb155e76f2997de27188',1,'crypto_values.h']]],
+  ['psa_5falg_5fsha_5f224',['PSA_ALG_SHA_224',['../group__crypto__types.html#ga25d6a3244d10a7148fe6b026d1979f7b',1,'crypto_values.h']]],
+  ['psa_5falg_5fsha_5f256',['PSA_ALG_SHA_256',['../group__crypto__types.html#ga619471f978e13cdd0a1e37145e4bf341',1,'crypto_values.h']]],
+  ['psa_5falg_5fsha_5f384',['PSA_ALG_SHA_384',['../group__crypto__types.html#ga58af64dd9a86a287e8da9ed7739eead4',1,'crypto_values.h']]],
+  ['psa_5falg_5fsha_5f512',['PSA_ALG_SHA_512',['../group__crypto__types.html#gafba3ae409f46d3dd7f37a0910660c3e9',1,'crypto_values.h']]],
+  ['psa_5falg_5fsha_5f512_5f224',['PSA_ALG_SHA_512_224',['../group__crypto__types.html#ga3fe2d7c3c80e3186ca78d16a35d5d931',1,'crypto_values.h']]],
+  ['psa_5falg_5fsha_5f512_5f256',['PSA_ALG_SHA_512_256',['../group__crypto__types.html#ga5910b3964c14e9613e8643a45b09c2d4',1,'crypto_values.h']]],
+  ['psa_5falg_5fsign_5fget_5fhash',['PSA_ALG_SIGN_GET_HASH',['../group__crypto__types.html#ga24cf6d7bcd2b9aeeeff86f07b6c674e3',1,'crypto_values.h']]],
+  ['psa_5falg_5ftls12_5fprf',['PSA_ALG_TLS12_PRF',['../group__crypto__types.html#ga6d5623c2ccda1d4a84e34351af8382d5',1,'crypto_values.h']]],
+  ['psa_5falg_5ftls12_5fpsk_5fto_5fms',['PSA_ALG_TLS12_PSK_TO_MS',['../group__crypto__types.html#ga039ec797f15d1635d9b2e09a611f8a68',1,'crypto_values.h']]],
+  ['psa_5falg_5ftls12_5fpsk_5fto_5fms_5fmax_5fpsk_5flen',['PSA_ALG_TLS12_PSK_TO_MS_MAX_PSK_LEN',['../crypto__sizes_8h.html#ab589ea3b86f2bfa18880459299c58f8a',1,'crypto_sizes.h']]],
+  ['psa_5falg_5ftruncated_5fmac',['PSA_ALG_TRUNCATED_MAC',['../group__crypto__types.html#gaf36137110baf7bb13c5028fd62c64276',1,'crypto_values.h']]],
+  ['psa_5falg_5fxts',['PSA_ALG_XTS',['../group__crypto__types.html#gaa722c0e426a797fd6d99623f59748125',1,'crypto_values.h']]],
+  ['psa_5falgorithm_5ft',['psa_algorithm_t',['../group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69',1,'crypto_types.h']]],
+  ['psa_5fallocate_5fkey',['psa_allocate_key',['../group__key__management.html#ga40094b77b7a42b9c8e158395113f1a35',1,'crypto.h']]],
+  ['psa_5fasymmetric_5fdecrypt',['psa_asymmetric_decrypt',['../group__asymmetric.html#ga34b55fbaee23dba1a677186fc66a556e',1,'crypto.h']]],
+  ['psa_5fasymmetric_5fdecrypt_5foutput_5fsize',['PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE',['../crypto__sizes_8h.html#a61a246f3eac41989821d982e56fea6c1',1,'crypto_sizes.h']]],
+  ['psa_5fasymmetric_5fencrypt',['psa_asymmetric_encrypt',['../group__asymmetric.html#gad429293b7b0bf2a830b9540a02552004',1,'crypto.h']]],
+  ['psa_5fasymmetric_5fencrypt_5foutput_5fsize',['PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE',['../crypto__sizes_8h.html#a66ba3bd93e5ec52870ccc3848778bad8',1,'crypto_sizes.h']]],
+  ['psa_5fasymmetric_5fsign',['psa_asymmetric_sign',['../group__asymmetric.html#ga1b0db9d345b5048cdd39357ac2d56c07',1,'crypto.h']]],
+  ['psa_5fasymmetric_5fsign_5foutput_5fsize',['PSA_ASYMMETRIC_SIGN_OUTPUT_SIZE',['../crypto__sizes_8h.html#a77565b9b4fe6d8730fd2120f4c8378ab',1,'crypto_sizes.h']]],
+  ['psa_5fasymmetric_5fsignature_5fmax_5fsize',['PSA_ASYMMETRIC_SIGNATURE_MAX_SIZE',['../crypto__sizes_8h.html#ad755101764dba14589e5919ee41be7ca',1,'crypto_sizes.h']]],
+  ['psa_5fasymmetric_5fverify',['psa_asymmetric_verify',['../group__asymmetric.html#ga1b8e964c8d927e3d632325d762959eb7',1,'crypto.h']]],
+  ['psa_5fblock_5fcipher_5fblock_5fsize',['PSA_BLOCK_CIPHER_BLOCK_SIZE',['../group__crypto__types.html#gacaa366bdeb0413e63e87a667c5457b2e',1,'crypto_values.h']]],
+  ['psa_5fcipher_5fabort',['psa_cipher_abort',['../group__cipher.html#gaad482cdca2098bca0620596aaa02eaa4',1,'crypto.h']]],
+  ['psa_5fcipher_5fdecrypt',['psa_cipher_decrypt',['../group__cipher.html#ga43d5991711ec45c98af0c1d99f6e0216',1,'crypto.h']]],
+  ['psa_5fcipher_5fdecrypt_5fsetup',['psa_cipher_decrypt_setup',['../group__cipher.html#gaddf8504e5367cd0efb4415bdec004f44',1,'crypto.h']]],
+  ['psa_5fcipher_5fencrypt',['psa_cipher_encrypt',['../group__cipher.html#gac76dda492d9a1ba6b327bff610ec17b2',1,'crypto.h']]],
+  ['psa_5fcipher_5fencrypt_5fsetup',['psa_cipher_encrypt_setup',['../group__cipher.html#ga2a7fc79a9d150d42dba99f40ee3a185e',1,'crypto.h']]],
+  ['psa_5fcipher_5ffinish',['psa_cipher_finish',['../group__cipher.html#ga1dcb58b8befe23f8a4d7a1d49c99249b',1,'crypto.h']]],
+  ['psa_5fcipher_5fgenerate_5fiv',['psa_cipher_generate_iv',['../group__cipher.html#ga44857cf5e0c3d134a3c560f8ff5b50aa',1,'crypto.h']]],
+  ['psa_5fcipher_5foperation_5finit',['PSA_CIPHER_OPERATION_INIT',['../group__cipher.html#ga2da0541aabf9a4995cf2004e36311919',1,'crypto.h']]],
+  ['psa_5fcipher_5foperation_5ft',['psa_cipher_operation_t',['../group__cipher.html#ga1399de29db657e3737bb09927aae51fa',1,'crypto.h']]],
+  ['psa_5fcipher_5fset_5fiv',['psa_cipher_set_iv',['../group__cipher.html#ga1359b2101f31637496ce7cc36c6e3d42',1,'crypto.h']]],
+  ['psa_5fcipher_5fupdate',['psa_cipher_update',['../group__cipher.html#gafd0caea99cf1052527e4089d37f5ab91',1,'crypto.h']]],
+  ['psa_5fclose_5fkey',['psa_close_key',['../group__key__management.html#gaa09b720d299dfe6b9f41c36e448078eb',1,'crypto.h']]],
+  ['psa_5fcopy_5fkey',['psa_copy_key',['../group__import__export.html#ga5c1c24176cfb1517a8806235b3162a9d',1,'crypto.h']]],
+  ['psa_5fcreate_5fkey',['psa_create_key',['../group__key__management.html#ga4108f255d3eaa6d23a7a14b684af8d7c',1,'crypto.h']]],
+  ['psa_5fcrypto_5fgenerator_5finit',['PSA_CRYPTO_GENERATOR_INIT',['../group__generators.html#ga4788b471385fc667876fbd8a0d3fe062',1,'crypto.h']]],
+  ['psa_5fcrypto_5fgenerator_5ft',['psa_crypto_generator_t',['../group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b',1,'crypto.h']]],
+  ['psa_5fcrypto_5finit',['psa_crypto_init',['../group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9',1,'crypto.h']]],
+  ['psa_5fdestroy_5fkey',['psa_destroy_key',['../group__import__export.html#ga165085fc1bc7a78b91792fdd94ae102c',1,'crypto.h']]],
+  ['psa_5fecc_5fcurve_5ft',['psa_ecc_curve_t',['../group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9',1,'crypto_types.h']]],
+  ['psa_5fecdsa_5fsignature_5fsize',['PSA_ECDSA_SIGNATURE_SIZE',['../crypto__sizes_8h.html#a10c472a35f04051add6b20cc228ffc11',1,'crypto_sizes.h']]],
+  ['psa_5ferror_5fbad_5fstate',['PSA_ERROR_BAD_STATE',['../group__error.html#ga933d40fa2a591004f2e93aa91e11db84',1,'crypto_values.h']]],
+  ['psa_5ferror_5fbuffer_5ftoo_5fsmall',['PSA_ERROR_BUFFER_TOO_SMALL',['../group__error.html#ga695025f4ec11249aee7ea3d0f65e01c8',1,'crypto_values.h']]],
+  ['psa_5ferror_5fcommunication_5ffailure',['PSA_ERROR_COMMUNICATION_FAILURE',['../group__error.html#ga5cdb6948371d49e916106249020ea3f7',1,'crypto_values.h']]],
+  ['psa_5ferror_5fempty_5fslot',['PSA_ERROR_EMPTY_SLOT',['../group__error.html#gaba00e3e6ceb2b12965a81e5ac02ae040',1,'crypto_values.h']]],
+  ['psa_5ferror_5fhardware_5ffailure',['PSA_ERROR_HARDWARE_FAILURE',['../group__error.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b',1,'crypto_values.h']]],
+  ['psa_5ferror_5finsufficient_5fcapacity',['PSA_ERROR_INSUFFICIENT_CAPACITY',['../group__error.html#gaf1fa61f72e9e5b4a848c991bea495767',1,'crypto_values.h']]],
+  ['psa_5ferror_5finsufficient_5fentropy',['PSA_ERROR_INSUFFICIENT_ENTROPY',['../group__error.html#ga4deb59fec02297ec5d8b42178323f675',1,'crypto_values.h']]],
+  ['psa_5ferror_5finsufficient_5fmemory',['PSA_ERROR_INSUFFICIENT_MEMORY',['../group__error.html#ga91b2ad8a867517a2651f1b076c5216e5',1,'crypto_values.h']]],
+  ['psa_5ferror_5finsufficient_5fstorage',['PSA_ERROR_INSUFFICIENT_STORAGE',['../group__error.html#ga897a45eb206a6f6b7be7ffbe36f0d766',1,'crypto_values.h']]],
+  ['psa_5ferror_5finvalid_5fargument',['PSA_ERROR_INVALID_ARGUMENT',['../group__error.html#ga798df25a505ebf931f7bec1f80f1f85f',1,'crypto_values.h']]],
+  ['psa_5ferror_5finvalid_5fhandle',['PSA_ERROR_INVALID_HANDLE',['../group__error.html#gadf22718935657c2c3168c228204085f9',1,'crypto_values.h']]],
+  ['psa_5ferror_5finvalid_5fpadding',['PSA_ERROR_INVALID_PADDING',['../group__error.html#gabe29594edbfb152cf153975b0597ac48',1,'crypto_values.h']]],
+  ['psa_5ferror_5finvalid_5fsignature',['PSA_ERROR_INVALID_SIGNATURE',['../group__error.html#ga35927f755d232c4766de600f2c49e9f2',1,'crypto_values.h']]],
+  ['psa_5ferror_5fnot_5fpermitted',['PSA_ERROR_NOT_PERMITTED',['../group__error.html#ga4d1b8dd8526177a15a210b7afc1accb1',1,'crypto_values.h']]],
+  ['psa_5ferror_5fnot_5fsupported',['PSA_ERROR_NOT_SUPPORTED',['../group__error.html#ga1dcc6d130633ed5db8942257581b55dd',1,'crypto_values.h']]],
+  ['psa_5ferror_5foccupied_5fslot',['PSA_ERROR_OCCUPIED_SLOT',['../group__error.html#gac2fee3a51249fbea45360aaa911f3e58',1,'crypto_values.h']]],
+  ['psa_5ferror_5fstorage_5ffailure',['PSA_ERROR_STORAGE_FAILURE',['../group__error.html#gadd169a1af2707862b95fb9df91dfc37d',1,'crypto_values.h']]],
+  ['psa_5ferror_5ftampering_5fdetected',['PSA_ERROR_TAMPERING_DETECTED',['../group__error.html#ga2c5dda1485cb54f2385cb9c1279a7004',1,'crypto_values.h']]],
+  ['psa_5ferror_5funknown_5ferror',['PSA_ERROR_UNKNOWN_ERROR',['../group__error.html#ga24d5fdcdd759f846f79d9e581c63a83f',1,'crypto_values.h']]],
+  ['psa_5fexport_5fkey',['psa_export_key',['../group__import__export.html#ga902b9a7a6cf34d6111668be777b05eaf',1,'crypto.h']]],
+  ['psa_5fexport_5fpublic_5fkey',['psa_export_public_key',['../group__import__export.html#gad760d1f0d4e60972c78cbb4c8a528256',1,'crypto.h']]],
+  ['psa_5fgenerate_5fkey',['psa_generate_key',['../group__random.html#ga72921520494b4f007a3afb904cd9ecdd',1,'crypto.h']]],
+  ['psa_5fgenerate_5fkey_5fextra_5frsa',['psa_generate_key_extra_rsa',['../structpsa__generate__key__extra__rsa.html',1,'']]],
+  ['psa_5fgenerate_5frandom',['psa_generate_random',['../group__random.html#ga1985eae417dfbccedf50d5fff54ea8c5',1,'crypto.h']]],
+  ['psa_5fgenerator_5fabort',['psa_generator_abort',['../group__generators.html#ga563ca64537d90368899286b36d8cf7f3',1,'crypto.h']]],
+  ['psa_5fgenerator_5fimport_5fkey',['psa_generator_import_key',['../group__generators.html#ga7fcdf07cd37279ca167db484053da894',1,'crypto.h']]],
+  ['psa_5fgenerator_5fread',['psa_generator_read',['../group__generators.html#gab5712ad29b78c2b170e64cc5bcfc1bce',1,'crypto.h']]],
+  ['psa_5fgenerator_5funbridled_5fcapacity',['PSA_GENERATOR_UNBRIDLED_CAPACITY',['../group__generators.html#gac3222df9b9ecca4d33ae56a7b8fbb1c9',1,'crypto.h']]],
+  ['psa_5fget_5fgenerator_5fcapacity',['psa_get_generator_capacity',['../group__generators.html#ga7453491e3b440193be2c5dccc2040fd2',1,'crypto.h']]],
+  ['psa_5fget_5fkey_5fdomain_5fparameters',['psa_get_key_domain_parameters',['../group__import__export.html#gae260b92e32ac5d63f7dfc6ffdf6536f7',1,'crypto.h']]],
+  ['psa_5fget_5fkey_5finformation',['psa_get_key_information',['../group__import__export.html#gae8939902d6977ea8ad13eb7b4db9a042',1,'crypto.h']]],
+  ['psa_5fget_5fkey_5flifetime',['psa_get_key_lifetime',['../group__key__management.html#ga1e4825ab59260aeb3bdbb3ff07210022',1,'crypto.h']]],
+  ['psa_5fget_5fkey_5fpolicy',['psa_get_key_policy',['../group__policy.html#gaed087d1386b807edee66b2e445ba9111',1,'crypto.h']]],
+  ['psa_5fhash_5fabort',['psa_hash_abort',['../group__hash.html#gab0b4d5f9912a615559497a467b532928',1,'crypto.h']]],
+  ['psa_5fhash_5fclone',['psa_hash_clone',['../group__hash.html#ga39673348f3302b4646bd780034a5aeda',1,'crypto.h']]],
+  ['psa_5fhash_5fcompare',['psa_hash_compare',['../group__hash.html#ga0bb6dbd3c310648c3cf7d202413ff0bc',1,'crypto.h']]],
+  ['psa_5fhash_5fcompute',['psa_hash_compute',['../group__hash.html#gac69f7f19d96a56c28cf3799d11b12156',1,'crypto.h']]],
+  ['psa_5fhash_5ffinish',['psa_hash_finish',['../group__hash.html#ga4795fd06a0067b0adcd92e9627b8c97e',1,'crypto.h']]],
+  ['psa_5fhash_5fmax_5fsize',['PSA_HASH_MAX_SIZE',['../crypto__sizes_8h.html#a6ce1014efbbc0bcca286ef7f9a72cb29',1,'crypto_sizes.h']]],
+  ['psa_5fhash_5foperation_5finit',['PSA_HASH_OPERATION_INIT',['../group__hash.html#ga6ab7fe8d3500bc2f21be840b4f4f8d1d',1,'crypto.h']]],
+  ['psa_5fhash_5foperation_5ft',['psa_hash_operation_t',['../group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab',1,'crypto.h']]],
+  ['psa_5fhash_5fsetup',['psa_hash_setup',['../group__hash.html#ga8d72896cf70fc4d514c5c6b978912515',1,'crypto.h']]],
+  ['psa_5fhash_5fsize',['PSA_HASH_SIZE',['../crypto__sizes_8h.html#aef340331ce3cba2b57e1fc5624bf1f99',1,'crypto_sizes.h']]],
+  ['psa_5fhash_5fupdate',['psa_hash_update',['../group__hash.html#ga65b16ef97d7f650899b7db4b7d1112ff',1,'crypto.h']]],
+  ['psa_5fhash_5fverify',['psa_hash_verify',['../group__hash.html#ga7be923c5700c9c70ef77ee9b76d1a5c0',1,'crypto.h']]],
+  ['psa_5fimport_5fkey',['psa_import_key',['../group__import__export.html#gac9f999cb4d098663d56095afe81a453a',1,'crypto.h']]],
+  ['psa_5fkdf_5fstep_5finfo',['PSA_KDF_STEP_INFO',['../group__derivation.html#ga836afe760bbda3dafc6c29631560b1a0',1,'crypto_values.h']]],
+  ['psa_5fkdf_5fstep_5flabel',['PSA_KDF_STEP_LABEL',['../group__derivation.html#ga9f4da10191bcb690b88756ed8470b03c',1,'crypto_values.h']]],
+  ['psa_5fkdf_5fstep_5fsalt',['PSA_KDF_STEP_SALT',['../group__derivation.html#ga384777dac55791d8f3a1af72c847b327',1,'crypto_values.h']]],
+  ['psa_5fkdf_5fstep_5fsecret',['PSA_KDF_STEP_SECRET',['../group__derivation.html#ga90a1995a41e26ed5ca30d2d4641d1168',1,'crypto_values.h']]],
+  ['psa_5fkey_5fagreement',['psa_key_agreement',['../group__derivation.html#ga2c7fe304cacc141ffb91553548abc5d2',1,'crypto.h']]],
+  ['psa_5fkey_5fagreement_5fraw_5fshared_5fsecret',['psa_key_agreement_raw_shared_secret',['../group__derivation.html#gaf1b12eff66a1a0020b5bdc8d0e910006',1,'crypto.h']]],
+  ['psa_5fkey_5fderivation_5finput_5fbytes',['psa_key_derivation_input_bytes',['../group__derivation.html#ga1b30e888db65c71f5337900848e1b03f',1,'crypto.h']]],
+  ['psa_5fkey_5fderivation_5finput_5fkey',['psa_key_derivation_input_key',['../group__derivation.html#ga9e5f549aa1f6f3863a07008d3d98f91a',1,'crypto.h']]],
+  ['psa_5fkey_5fderivation_5fsetup',['psa_key_derivation_setup',['../group__derivation.html#ga1825696be813dfac2b8d3d02717e71c5',1,'crypto.h']]],
+  ['psa_5fkey_5fderivation_5fstep_5ft',['psa_key_derivation_step_t',['../group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b',1,'crypto_types.h']]],
+  ['psa_5fkey_5fexport_5fmax_5fsize',['PSA_KEY_EXPORT_MAX_SIZE',['../crypto__sizes_8h.html#a0aae885cc8ff92e00fb5248420b939c3',1,'crypto_sizes.h']]],
+  ['psa_5fkey_5fhandle_5ft',['psa_key_handle_t',['../group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75',1,'crypto.h']]],
+  ['psa_5fkey_5fid_5ft',['psa_key_id_t',['../group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b',1,'crypto_types.h']]],
+  ['psa_5fkey_5flifetime_5fpersistent',['PSA_KEY_LIFETIME_PERSISTENT',['../group__key__lifetimes.html#ga3713a01c5fcd5f7eae46ff22ceaf6d02',1,'crypto_values.h']]],
+  ['psa_5fkey_5flifetime_5ft',['psa_key_lifetime_t',['../group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf',1,'crypto_types.h']]],
+  ['psa_5fkey_5flifetime_5fvolatile',['PSA_KEY_LIFETIME_VOLATILE',['../group__key__lifetimes.html#ga8b438870ba69489b685730d346455108',1,'crypto_values.h']]],
+  ['psa_5fkey_5fpolicy_5fget_5falgorithm',['psa_key_policy_get_algorithm',['../group__policy.html#gaadf16b89ace53e1d2cb5bcb0aef24c86',1,'crypto.h']]],
+  ['psa_5fkey_5fpolicy_5fget_5fusage',['psa_key_policy_get_usage',['../group__policy.html#ga7746662b7503e484774d0ecb5d8ac2ab',1,'crypto.h']]],
+  ['psa_5fkey_5fpolicy_5finit',['PSA_KEY_POLICY_INIT',['../group__policy.html#ga5e6bc5f550e88fdc7790f2a75e79f7c5',1,'crypto.h']]],
+  ['psa_5fkey_5fpolicy_5fset_5fusage',['psa_key_policy_set_usage',['../group__policy.html#gac16792fd6d375a5f76d372090df40607',1,'crypto.h']]],
+  ['psa_5fkey_5fpolicy_5ft',['psa_key_policy_t',['../group__policy.html#gaf553efd409845b6d09ff25ce2ba36607',1,'crypto.h']]],
+  ['psa_5fkey_5ftype_5faes',['PSA_KEY_TYPE_AES',['../group__crypto__types.html#ga6ee54579dcf278c677eda4bb1a29575e',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5farc4',['PSA_KEY_TYPE_ARC4',['../group__crypto__types.html#gae4d46e83f910dcaa126000a8ed03cde9',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fcamellia',['PSA_KEY_TYPE_CAMELLIA',['../group__crypto__types.html#gad8e5da742343fd5519f9d8a630c2ed81',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fderive',['PSA_KEY_TYPE_DERIVE',['../group__crypto__types.html#gae871b2357b8593f33bfd51abbf93ebb1',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fdes',['PSA_KEY_TYPE_DES',['../group__crypto__types.html#ga577562bfbbc691c820d55ec308333138',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fdh_5fkeypair',['PSA_KEY_TYPE_DH_KEYPAIR',['../group__crypto__types.html#ga39b63c6b97a62a316c0660bf72b2fdd5',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fdh_5fpublic_5fkey',['PSA_KEY_TYPE_DH_PUBLIC_KEY',['../group__crypto__types.html#ga325a340d7c72d99d3a678eb210bf6e0a',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fdsa_5fkeypair',['PSA_KEY_TYPE_DSA_KEYPAIR',['../group__crypto__types.html#ga011010ee28c20388f3d89fb27088ed62',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fdsa_5fpublic_5fkey',['PSA_KEY_TYPE_DSA_PUBLIC_KEY',['../group__crypto__types.html#ga5e7439c2905136366c3a876e62e5ddfc',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fecc_5fkeypair',['PSA_KEY_TYPE_ECC_KEYPAIR',['../group__crypto__types.html#gadf3ad65d157bf5282849c954bf3f51af',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fecc_5fpublic_5fkey',['PSA_KEY_TYPE_ECC_PUBLIC_KEY',['../group__crypto__types.html#gad54c03d3b47020e571a72cd01d978cf2',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fget_5fcurve',['PSA_KEY_TYPE_GET_CURVE',['../group__crypto__types.html#ga0c567210e6f80aa8f2aa87efa7a3a3f9',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fhmac',['PSA_KEY_TYPE_HMAC',['../group__crypto__types.html#ga92d989f4ca64abd00f463defd773a6f8',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fis_5fasymmetric',['PSA_KEY_TYPE_IS_ASYMMETRIC',['../group__crypto__types.html#gab138ae2ebf2905dfbaf4154db2620939',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fis_5fdh',['PSA_KEY_TYPE_IS_DH',['../group__crypto__types.html#ga248ae35c0e2becaebbf479fc1c3a3b0e',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fis_5fdsa',['PSA_KEY_TYPE_IS_DSA',['../group__crypto__types.html#ga273fdfcf23eb0624f8b63d2321cf95c1',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fis_5fecc',['PSA_KEY_TYPE_IS_ECC',['../group__crypto__types.html#ga88e01fa06b585654689a99bcc06bbe66',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fis_5fecc_5fkeypair',['PSA_KEY_TYPE_IS_ECC_KEYPAIR',['../group__crypto__types.html#ga7bf101b671e8cf26f4cb08fcb679db4b',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fis_5fecc_5fpublic_5fkey',['PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY',['../group__crypto__types.html#ga5af146a173b0c84d7e737e2fb6a3c0a7',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fis_5fkeypair',['PSA_KEY_TYPE_IS_KEYPAIR',['../group__crypto__types.html#gac14c6d6e1b2b7f4a92a7b757465cff29',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fis_5fpublic_5fkey',['PSA_KEY_TYPE_IS_PUBLIC_KEY',['../group__crypto__types.html#gac674a0f059bc0cb72b47f0c517b4f45b',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fis_5frsa',['PSA_KEY_TYPE_IS_RSA',['../group__crypto__types.html#ga0e1d8f241228e49c9cadadfb4579ef1a',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fis_5funstructured',['PSA_KEY_TYPE_IS_UNSTRUCTURED',['../group__crypto__types.html#gaef86ce4e810e1c2c76068ac874bfef54',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fis_5fvendor_5fdefined',['PSA_KEY_TYPE_IS_VENDOR_DEFINED',['../group__crypto__types.html#gadbe4c086a6562aefe344bc79e51bdfd3',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fkeypair_5fof_5fpublic_5fkey',['PSA_KEY_TYPE_KEYPAIR_OF_PUBLIC_KEY',['../group__crypto__types.html#gaf09f1ca1de6a7e7cff0fe516f3f6c91d',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fnone',['PSA_KEY_TYPE_NONE',['../group__crypto__types.html#gafce7ab2b54ce97ea5bff73f13a9f3e5b',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fpublic_5fkey_5fof_5fkeypair',['PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR',['../group__crypto__types.html#gace08e46dd7cbf642d50d982a25d02bec',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5fraw_5fdata',['PSA_KEY_TYPE_RAW_DATA',['../group__crypto__types.html#gaa97f92025533102616b32d571c940d80',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5frsa_5fkeypair',['PSA_KEY_TYPE_RSA_KEYPAIR',['../group__crypto__types.html#ga581f50687f5d650456925278948f2799',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5frsa_5fpublic_5fkey',['PSA_KEY_TYPE_RSA_PUBLIC_KEY',['../group__crypto__types.html#ga9ba0878f56c8bcd1995ac017a74f513b',1,'crypto_values.h']]],
+  ['psa_5fkey_5ftype_5ft',['psa_key_type_t',['../group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628',1,'crypto_types.h']]],
+  ['psa_5fkey_5ftype_5fvendor_5fflag',['PSA_KEY_TYPE_VENDOR_FLAG',['../group__crypto__types.html#ga8dbaed2fdb1ebae8aa127ad3988516f7',1,'crypto_values.h']]],
+  ['psa_5fkey_5fusage_5fdecrypt',['PSA_KEY_USAGE_DECRYPT',['../group__policy.html#gac3f2d2e5983db1edde9f142ca9bf8e6a',1,'crypto_values.h']]],
+  ['psa_5fkey_5fusage_5fderive',['PSA_KEY_USAGE_DERIVE',['../group__policy.html#gaf19022acc5ef23cf12477f632b48a0b2',1,'crypto_values.h']]],
+  ['psa_5fkey_5fusage_5fencrypt',['PSA_KEY_USAGE_ENCRYPT',['../group__policy.html#ga75153b296d045d529d97203a6a995dad',1,'crypto_values.h']]],
+  ['psa_5fkey_5fusage_5fexport',['PSA_KEY_USAGE_EXPORT',['../group__policy.html#ga7dddccdd1303176e87a4d20c87b589ed',1,'crypto_values.h']]],
+  ['psa_5fkey_5fusage_5fsign',['PSA_KEY_USAGE_SIGN',['../group__policy.html#ga99b9f456cf59efc4b5579465407aef5a',1,'crypto_values.h']]],
+  ['psa_5fkey_5fusage_5ft',['psa_key_usage_t',['../group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25',1,'crypto_types.h']]],
+  ['psa_5fkey_5fusage_5fverify',['PSA_KEY_USAGE_VERIFY',['../group__policy.html#ga39b54ffd5958b69634607924fa53cea6',1,'crypto_values.h']]],
+  ['psa_5fmac_5fabort',['psa_mac_abort',['../group__MAC.html#gacd8dd54855ba1bc0a03f104f252884fd',1,'crypto.h']]],
+  ['psa_5fmac_5fcompute',['psa_mac_compute',['../group__MAC.html#gace78d9b51394f9d4f77952963665897a',1,'crypto.h']]],
+  ['psa_5fmac_5ffinal_5fsize',['PSA_MAC_FINAL_SIZE',['../crypto__sizes_8h.html#aa84c5fb384ac7cb1bfc52adde96588ee',1,'crypto_sizes.h']]],
+  ['psa_5fmac_5fmax_5fsize',['PSA_MAC_MAX_SIZE',['../crypto__sizes_8h.html#a4681cc4f6226883a2160122c562ca682',1,'crypto_sizes.h']]],
+  ['psa_5fmac_5foperation_5finit',['PSA_MAC_OPERATION_INIT',['../group__MAC.html#ga441b6efc161a4573d06465bd22d9dc2d',1,'crypto.h']]],
+  ['psa_5fmac_5foperation_5ft',['psa_mac_operation_t',['../group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37',1,'crypto.h']]],
+  ['psa_5fmac_5fsign_5ffinish',['psa_mac_sign_finish',['../group__MAC.html#gac22bc0125580c96724a09226cfbc97f2',1,'crypto.h']]],
+  ['psa_5fmac_5fsign_5fsetup',['psa_mac_sign_setup',['../group__MAC.html#gad33f2b15119593571ca6b8e7c757ab0e',1,'crypto.h']]],
+  ['psa_5fmac_5ftruncated_5flength',['PSA_MAC_TRUNCATED_LENGTH',['../group__crypto__types.html#gab03726c4476174e019a08e2a04018ce8',1,'crypto_values.h']]],
+  ['psa_5fmac_5fupdate',['psa_mac_update',['../group__MAC.html#ga5560af371497babefe03c9da4e8a1c05',1,'crypto.h']]],
+  ['psa_5fmac_5fverify',['psa_mac_verify',['../group__MAC.html#ga08e2e8c21bfe762a907266f3bdd1d07c',1,'crypto.h']]],
+  ['psa_5fmac_5fverify_5ffinish',['psa_mac_verify_finish',['../group__MAC.html#gac92b2930d6728e1be4d011c05d485822',1,'crypto.h']]],
+  ['psa_5fmac_5fverify_5fsetup',['psa_mac_verify_setup',['../group__MAC.html#gaa721a59ae6d085ec90c7dc918879a027',1,'crypto.h']]],
+  ['psa_5fmax_5fblock_5fcipher_5fblock_5fsize',['PSA_MAX_BLOCK_CIPHER_BLOCK_SIZE',['../crypto__sizes_8h.html#aa3cfcff0291d6da279fec8fe834d5dec',1,'crypto_sizes.h']]],
+  ['psa_5fopen_5fkey',['psa_open_key',['../group__key__management.html#gaa9f1c848cf78b80fe2a7b18bb7ccec50',1,'crypto.h']]],
+  ['psa_5fset_5fgenerator_5fcapacity',['psa_set_generator_capacity',['../group__generators.html#ga45676ec3c719622f95caaf926f44bb6e',1,'crypto.h']]],
+  ['psa_5fset_5fkey_5fdomain_5fparameters',['psa_set_key_domain_parameters',['../group__import__export.html#ga091da8d3d39137fd6ad59f2b10234300',1,'crypto.h']]],
+  ['psa_5fset_5fkey_5fpolicy',['psa_set_key_policy',['../group__policy.html#ga1e2a6e50b621864f95d438222a3c640b',1,'crypto.h']]],
+  ['psa_5fstatus_5ft',['psa_status_t',['../group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9',1,'crypto_types.h']]],
+  ['psa_5fsuccess',['PSA_SUCCESS',['../group__error.html#ga4cc859e2c66ca381c7418db3527a65e1',1,'crypto_values.h']]]
+];
diff --git a/docs/html/search/all_9.html b/docs/html/search/all_9.html
new file mode 100644
index 0000000..c8c5102
--- /dev/null
+++ b/docs/html/search/all_9.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_9.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js
new file mode 100644
index 0000000..2b3e593
--- /dev/null
+++ b/docs/html/search/all_9.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['random_20generation',['Random generation',['../group__random.html',1,'']]]
+];
diff --git a/docs/html/search/all_a.html b/docs/html/search/all_a.html
new file mode 100644
index 0000000..4cb31f0
--- /dev/null
+++ b/docs/html/search/all_a.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js
new file mode 100644
index 0000000..5161a09
--- /dev/null
+++ b/docs/html/search/all_a.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['symmetric_20ciphers',['Symmetric ciphers',['../group__cipher.html',1,'']]]
+];
diff --git a/docs/html/search/classes_0.html b/docs/html/search/classes_0.html
new file mode 100644
index 0000000..025587a
--- /dev/null
+++ b/docs/html/search/classes_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js
new file mode 100644
index 0000000..1d78234
--- /dev/null
+++ b/docs/html/search/classes_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['psa_5fgenerate_5fkey_5fextra_5frsa',['psa_generate_key_extra_rsa',['../structpsa__generate__key__extra__rsa.html',1,'']]]
+];
diff --git a/docs/html/search/close.png b/docs/html/search/close.png
new file mode 100644
index 0000000..9342d3d
--- /dev/null
+++ b/docs/html/search/close.png
Binary files differ
diff --git a/docs/html/search/defines_0.html b/docs/html/search/defines_0.html
new file mode 100644
index 0000000..17cfaa2
--- /dev/null
+++ b/docs/html/search/defines_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/defines_0.js b/docs/html/search/defines_0.js
new file mode 100644
index 0000000..ff2253e
--- /dev/null
+++ b/docs/html/search/defines_0.js
@@ -0,0 +1,19 @@
+var searchData=
+[
+  ['psa_5faead_5fdecrypt_5foutput_5fsize',['PSA_AEAD_DECRYPT_OUTPUT_SIZE',['../crypto__sizes_8h.html#a1d057796166c16eb673ad1997e48a60b',1,'crypto_sizes.h']]],
+  ['psa_5faead_5fencrypt_5foutput_5fsize',['PSA_AEAD_ENCRYPT_OUTPUT_SIZE',['../crypto__sizes_8h.html#a85667d47a7aa6c7b99a80e5273671266',1,'crypto_sizes.h']]],
+  ['psa_5faead_5ffinish_5foutput_5fsize',['PSA_AEAD_FINISH_OUTPUT_SIZE',['../crypto__sizes_8h.html#af45d92c1d7ef43822b8df21ab1117d3f',1,'crypto_sizes.h']]],
+  ['psa_5faead_5ftag_5flength',['PSA_AEAD_TAG_LENGTH',['../crypto__sizes_8h.html#a8e3079b2e624cb8d32b94843cddada49',1,'crypto_sizes.h']]],
+  ['psa_5falg_5ftls12_5fpsk_5fto_5fms_5fmax_5fpsk_5flen',['PSA_ALG_TLS12_PSK_TO_MS_MAX_PSK_LEN',['../crypto__sizes_8h.html#ab589ea3b86f2bfa18880459299c58f8a',1,'crypto_sizes.h']]],
+  ['psa_5fasymmetric_5fdecrypt_5foutput_5fsize',['PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE',['../crypto__sizes_8h.html#a61a246f3eac41989821d982e56fea6c1',1,'crypto_sizes.h']]],
+  ['psa_5fasymmetric_5fencrypt_5foutput_5fsize',['PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE',['../crypto__sizes_8h.html#a66ba3bd93e5ec52870ccc3848778bad8',1,'crypto_sizes.h']]],
+  ['psa_5fasymmetric_5fsign_5foutput_5fsize',['PSA_ASYMMETRIC_SIGN_OUTPUT_SIZE',['../crypto__sizes_8h.html#a77565b9b4fe6d8730fd2120f4c8378ab',1,'crypto_sizes.h']]],
+  ['psa_5fasymmetric_5fsignature_5fmax_5fsize',['PSA_ASYMMETRIC_SIGNATURE_MAX_SIZE',['../crypto__sizes_8h.html#ad755101764dba14589e5919ee41be7ca',1,'crypto_sizes.h']]],
+  ['psa_5fecdsa_5fsignature_5fsize',['PSA_ECDSA_SIGNATURE_SIZE',['../crypto__sizes_8h.html#a10c472a35f04051add6b20cc228ffc11',1,'crypto_sizes.h']]],
+  ['psa_5fhash_5fmax_5fsize',['PSA_HASH_MAX_SIZE',['../crypto__sizes_8h.html#a6ce1014efbbc0bcca286ef7f9a72cb29',1,'crypto_sizes.h']]],
+  ['psa_5fhash_5fsize',['PSA_HASH_SIZE',['../crypto__sizes_8h.html#aef340331ce3cba2b57e1fc5624bf1f99',1,'crypto_sizes.h']]],
+  ['psa_5fkey_5fexport_5fmax_5fsize',['PSA_KEY_EXPORT_MAX_SIZE',['../crypto__sizes_8h.html#a0aae885cc8ff92e00fb5248420b939c3',1,'crypto_sizes.h']]],
+  ['psa_5fmac_5ffinal_5fsize',['PSA_MAC_FINAL_SIZE',['../crypto__sizes_8h.html#aa84c5fb384ac7cb1bfc52adde96588ee',1,'crypto_sizes.h']]],
+  ['psa_5fmac_5fmax_5fsize',['PSA_MAC_MAX_SIZE',['../crypto__sizes_8h.html#a4681cc4f6226883a2160122c562ca682',1,'crypto_sizes.h']]],
+  ['psa_5fmax_5fblock_5fcipher_5fblock_5fsize',['PSA_MAX_BLOCK_CIPHER_BLOCK_SIZE',['../crypto__sizes_8h.html#aa3cfcff0291d6da279fec8fe834d5dec',1,'crypto_sizes.h']]]
+];
diff --git a/docs/html/search/files_0.html b/docs/html/search/files_0.html
new file mode 100644
index 0000000..0b637cf
--- /dev/null
+++ b/docs/html/search/files_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/files_0.js b/docs/html/search/files_0.js
new file mode 100644
index 0000000..1f9a5bb
--- /dev/null
+++ b/docs/html/search/files_0.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+  ['crypto_2eh',['crypto.h',['../crypto_8h.html',1,'']]],
+  ['crypto_5fsizes_2eh',['crypto_sizes.h',['../crypto__sizes_8h.html',1,'']]],
+  ['crypto_5ftypes_2eh',['crypto_types.h',['../crypto__types_8h.html',1,'']]],
+  ['crypto_5fvalues_2eh',['crypto_values.h',['../crypto__values_8h.html',1,'']]]
+];
diff --git a/docs/html/search/functions_0.html b/docs/html/search/functions_0.html
new file mode 100644
index 0000000..6bc52b6
--- /dev/null
+++ b/docs/html/search/functions_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/functions_0.js b/docs/html/search/functions_0.js
new file mode 100644
index 0000000..cc5b60d
--- /dev/null
+++ b/docs/html/search/functions_0.js
@@ -0,0 +1,75 @@
+var searchData=
+[
+  ['psa_5faead_5fabort',['psa_aead_abort',['../group__aead.html#gae8a5f93d92318c8f592ee9fbb9d36ba0',1,'crypto.h']]],
+  ['psa_5faead_5fdecrypt',['psa_aead_decrypt',['../group__aead.html#gaa8ce6527f2e227f1071fadbf2099793b',1,'crypto.h']]],
+  ['psa_5faead_5fdecrypt_5fsetup',['psa_aead_decrypt_setup',['../group__aead.html#ga439896519d4a367ec86b47f201884152',1,'crypto.h']]],
+  ['psa_5faead_5fencrypt',['psa_aead_encrypt',['../group__aead.html#ga44de092cf58bb6c820c5c80a6c51610d',1,'crypto.h']]],
+  ['psa_5faead_5fencrypt_5fsetup',['psa_aead_encrypt_setup',['../group__aead.html#ga47265dc4852f1476f852752218fd12b2',1,'crypto.h']]],
+  ['psa_5faead_5ffinish',['psa_aead_finish',['../group__aead.html#ga759791bbe1763b377c3b5447641f1fc8',1,'crypto.h']]],
+  ['psa_5faead_5fgenerate_5fnonce',['psa_aead_generate_nonce',['../group__aead.html#ga3eadcf2a29f662129ea4fb3454969ba2',1,'crypto.h']]],
+  ['psa_5faead_5fset_5flengths',['psa_aead_set_lengths',['../group__aead.html#gad3431e28d05002c2a7b0760610176050',1,'crypto.h']]],
+  ['psa_5faead_5fset_5fnonce',['psa_aead_set_nonce',['../group__aead.html#ga40641d0721ca7fe01bbcd9ef635fbc46',1,'crypto.h']]],
+  ['psa_5faead_5fupdate',['psa_aead_update',['../group__aead.html#ga3b105de2088cef7c3d9e2fd8048c841c',1,'crypto.h']]],
+  ['psa_5faead_5fupdate_5fad',['psa_aead_update_ad',['../group__aead.html#ga6d0eed03f832e5c9c91cb8adf2882569',1,'crypto.h']]],
+  ['psa_5faead_5fverify',['psa_aead_verify',['../group__aead.html#gaaed211fc61977c859d6ff07f39f59219',1,'crypto.h']]],
+  ['psa_5fallocate_5fkey',['psa_allocate_key',['../group__key__management.html#ga40094b77b7a42b9c8e158395113f1a35',1,'crypto.h']]],
+  ['psa_5fasymmetric_5fdecrypt',['psa_asymmetric_decrypt',['../group__asymmetric.html#ga34b55fbaee23dba1a677186fc66a556e',1,'crypto.h']]],
+  ['psa_5fasymmetric_5fencrypt',['psa_asymmetric_encrypt',['../group__asymmetric.html#gad429293b7b0bf2a830b9540a02552004',1,'crypto.h']]],
+  ['psa_5fasymmetric_5fsign',['psa_asymmetric_sign',['../group__asymmetric.html#ga1b0db9d345b5048cdd39357ac2d56c07',1,'crypto.h']]],
+  ['psa_5fasymmetric_5fverify',['psa_asymmetric_verify',['../group__asymmetric.html#ga1b8e964c8d927e3d632325d762959eb7',1,'crypto.h']]],
+  ['psa_5fcipher_5fabort',['psa_cipher_abort',['../group__cipher.html#gaad482cdca2098bca0620596aaa02eaa4',1,'crypto.h']]],
+  ['psa_5fcipher_5fdecrypt',['psa_cipher_decrypt',['../group__cipher.html#ga43d5991711ec45c98af0c1d99f6e0216',1,'crypto.h']]],
+  ['psa_5fcipher_5fdecrypt_5fsetup',['psa_cipher_decrypt_setup',['../group__cipher.html#gaddf8504e5367cd0efb4415bdec004f44',1,'crypto.h']]],
+  ['psa_5fcipher_5fencrypt',['psa_cipher_encrypt',['../group__cipher.html#gac76dda492d9a1ba6b327bff610ec17b2',1,'crypto.h']]],
+  ['psa_5fcipher_5fencrypt_5fsetup',['psa_cipher_encrypt_setup',['../group__cipher.html#ga2a7fc79a9d150d42dba99f40ee3a185e',1,'crypto.h']]],
+  ['psa_5fcipher_5ffinish',['psa_cipher_finish',['../group__cipher.html#ga1dcb58b8befe23f8a4d7a1d49c99249b',1,'crypto.h']]],
+  ['psa_5fcipher_5fgenerate_5fiv',['psa_cipher_generate_iv',['../group__cipher.html#ga44857cf5e0c3d134a3c560f8ff5b50aa',1,'crypto.h']]],
+  ['psa_5fcipher_5fset_5fiv',['psa_cipher_set_iv',['../group__cipher.html#ga1359b2101f31637496ce7cc36c6e3d42',1,'crypto.h']]],
+  ['psa_5fcipher_5fupdate',['psa_cipher_update',['../group__cipher.html#gafd0caea99cf1052527e4089d37f5ab91',1,'crypto.h']]],
+  ['psa_5fclose_5fkey',['psa_close_key',['../group__key__management.html#gaa09b720d299dfe6b9f41c36e448078eb',1,'crypto.h']]],
+  ['psa_5fcopy_5fkey',['psa_copy_key',['../group__import__export.html#ga5c1c24176cfb1517a8806235b3162a9d',1,'crypto.h']]],
+  ['psa_5fcreate_5fkey',['psa_create_key',['../group__key__management.html#ga4108f255d3eaa6d23a7a14b684af8d7c',1,'crypto.h']]],
+  ['psa_5fcrypto_5finit',['psa_crypto_init',['../group__initialization.html#ga2de150803fc2f7dc6101d5af7e921dd9',1,'crypto.h']]],
+  ['psa_5fdestroy_5fkey',['psa_destroy_key',['../group__import__export.html#ga165085fc1bc7a78b91792fdd94ae102c',1,'crypto.h']]],
+  ['psa_5fexport_5fkey',['psa_export_key',['../group__import__export.html#ga902b9a7a6cf34d6111668be777b05eaf',1,'crypto.h']]],
+  ['psa_5fexport_5fpublic_5fkey',['psa_export_public_key',['../group__import__export.html#gad760d1f0d4e60972c78cbb4c8a528256',1,'crypto.h']]],
+  ['psa_5fgenerate_5fkey',['psa_generate_key',['../group__random.html#ga72921520494b4f007a3afb904cd9ecdd',1,'crypto.h']]],
+  ['psa_5fgenerate_5frandom',['psa_generate_random',['../group__random.html#ga1985eae417dfbccedf50d5fff54ea8c5',1,'crypto.h']]],
+  ['psa_5fgenerator_5fabort',['psa_generator_abort',['../group__generators.html#ga563ca64537d90368899286b36d8cf7f3',1,'crypto.h']]],
+  ['psa_5fgenerator_5fimport_5fkey',['psa_generator_import_key',['../group__generators.html#ga7fcdf07cd37279ca167db484053da894',1,'crypto.h']]],
+  ['psa_5fgenerator_5fread',['psa_generator_read',['../group__generators.html#gab5712ad29b78c2b170e64cc5bcfc1bce',1,'crypto.h']]],
+  ['psa_5fget_5fgenerator_5fcapacity',['psa_get_generator_capacity',['../group__generators.html#ga7453491e3b440193be2c5dccc2040fd2',1,'crypto.h']]],
+  ['psa_5fget_5fkey_5fdomain_5fparameters',['psa_get_key_domain_parameters',['../group__import__export.html#gae260b92e32ac5d63f7dfc6ffdf6536f7',1,'crypto.h']]],
+  ['psa_5fget_5fkey_5finformation',['psa_get_key_information',['../group__import__export.html#gae8939902d6977ea8ad13eb7b4db9a042',1,'crypto.h']]],
+  ['psa_5fget_5fkey_5flifetime',['psa_get_key_lifetime',['../group__key__management.html#ga1e4825ab59260aeb3bdbb3ff07210022',1,'crypto.h']]],
+  ['psa_5fget_5fkey_5fpolicy',['psa_get_key_policy',['../group__policy.html#gaed087d1386b807edee66b2e445ba9111',1,'crypto.h']]],
+  ['psa_5fhash_5fabort',['psa_hash_abort',['../group__hash.html#gab0b4d5f9912a615559497a467b532928',1,'crypto.h']]],
+  ['psa_5fhash_5fclone',['psa_hash_clone',['../group__hash.html#ga39673348f3302b4646bd780034a5aeda',1,'crypto.h']]],
+  ['psa_5fhash_5fcompare',['psa_hash_compare',['../group__hash.html#ga0bb6dbd3c310648c3cf7d202413ff0bc',1,'crypto.h']]],
+  ['psa_5fhash_5fcompute',['psa_hash_compute',['../group__hash.html#gac69f7f19d96a56c28cf3799d11b12156',1,'crypto.h']]],
+  ['psa_5fhash_5ffinish',['psa_hash_finish',['../group__hash.html#ga4795fd06a0067b0adcd92e9627b8c97e',1,'crypto.h']]],
+  ['psa_5fhash_5fsetup',['psa_hash_setup',['../group__hash.html#ga8d72896cf70fc4d514c5c6b978912515',1,'crypto.h']]],
+  ['psa_5fhash_5fupdate',['psa_hash_update',['../group__hash.html#ga65b16ef97d7f650899b7db4b7d1112ff',1,'crypto.h']]],
+  ['psa_5fhash_5fverify',['psa_hash_verify',['../group__hash.html#ga7be923c5700c9c70ef77ee9b76d1a5c0',1,'crypto.h']]],
+  ['psa_5fimport_5fkey',['psa_import_key',['../group__import__export.html#gac9f999cb4d098663d56095afe81a453a',1,'crypto.h']]],
+  ['psa_5fkey_5fagreement',['psa_key_agreement',['../group__derivation.html#ga2c7fe304cacc141ffb91553548abc5d2',1,'crypto.h']]],
+  ['psa_5fkey_5fagreement_5fraw_5fshared_5fsecret',['psa_key_agreement_raw_shared_secret',['../group__derivation.html#gaf1b12eff66a1a0020b5bdc8d0e910006',1,'crypto.h']]],
+  ['psa_5fkey_5fderivation_5finput_5fbytes',['psa_key_derivation_input_bytes',['../group__derivation.html#ga1b30e888db65c71f5337900848e1b03f',1,'crypto.h']]],
+  ['psa_5fkey_5fderivation_5finput_5fkey',['psa_key_derivation_input_key',['../group__derivation.html#ga9e5f549aa1f6f3863a07008d3d98f91a',1,'crypto.h']]],
+  ['psa_5fkey_5fderivation_5fsetup',['psa_key_derivation_setup',['../group__derivation.html#ga1825696be813dfac2b8d3d02717e71c5',1,'crypto.h']]],
+  ['psa_5fkey_5fpolicy_5fget_5falgorithm',['psa_key_policy_get_algorithm',['../group__policy.html#gaadf16b89ace53e1d2cb5bcb0aef24c86',1,'crypto.h']]],
+  ['psa_5fkey_5fpolicy_5fget_5fusage',['psa_key_policy_get_usage',['../group__policy.html#ga7746662b7503e484774d0ecb5d8ac2ab',1,'crypto.h']]],
+  ['psa_5fkey_5fpolicy_5fset_5fusage',['psa_key_policy_set_usage',['../group__policy.html#gac16792fd6d375a5f76d372090df40607',1,'crypto.h']]],
+  ['psa_5fmac_5fabort',['psa_mac_abort',['../group__MAC.html#gacd8dd54855ba1bc0a03f104f252884fd',1,'crypto.h']]],
+  ['psa_5fmac_5fcompute',['psa_mac_compute',['../group__MAC.html#gace78d9b51394f9d4f77952963665897a',1,'crypto.h']]],
+  ['psa_5fmac_5fsign_5ffinish',['psa_mac_sign_finish',['../group__MAC.html#gac22bc0125580c96724a09226cfbc97f2',1,'crypto.h']]],
+  ['psa_5fmac_5fsign_5fsetup',['psa_mac_sign_setup',['../group__MAC.html#gad33f2b15119593571ca6b8e7c757ab0e',1,'crypto.h']]],
+  ['psa_5fmac_5fupdate',['psa_mac_update',['../group__MAC.html#ga5560af371497babefe03c9da4e8a1c05',1,'crypto.h']]],
+  ['psa_5fmac_5fverify',['psa_mac_verify',['../group__MAC.html#ga08e2e8c21bfe762a907266f3bdd1d07c',1,'crypto.h']]],
+  ['psa_5fmac_5fverify_5ffinish',['psa_mac_verify_finish',['../group__MAC.html#gac92b2930d6728e1be4d011c05d485822',1,'crypto.h']]],
+  ['psa_5fmac_5fverify_5fsetup',['psa_mac_verify_setup',['../group__MAC.html#gaa721a59ae6d085ec90c7dc918879a027',1,'crypto.h']]],
+  ['psa_5fopen_5fkey',['psa_open_key',['../group__key__management.html#gaa9f1c848cf78b80fe2a7b18bb7ccec50',1,'crypto.h']]],
+  ['psa_5fset_5fgenerator_5fcapacity',['psa_set_generator_capacity',['../group__generators.html#ga45676ec3c719622f95caaf926f44bb6e',1,'crypto.h']]],
+  ['psa_5fset_5fkey_5fdomain_5fparameters',['psa_set_key_domain_parameters',['../group__import__export.html#ga091da8d3d39137fd6ad59f2b10234300',1,'crypto.h']]],
+  ['psa_5fset_5fkey_5fpolicy',['psa_set_key_policy',['../group__policy.html#ga1e2a6e50b621864f95d438222a3c640b',1,'crypto.h']]]
+];
diff --git a/docs/html/search/groups_0.html b/docs/html/search/groups_0.html
new file mode 100644
index 0000000..95cee43
--- /dev/null
+++ b/docs/html/search/groups_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/groups_0.js b/docs/html/search/groups_0.js
new file mode 100644
index 0000000..9e9cdcb
--- /dev/null
+++ b/docs/html/search/groups_0.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['authenticated_20encryption_20with_20associated_20data_20_28aead_29',['Authenticated encryption with associated data (AEAD)',['../group__aead.html',1,'']]],
+  ['asymmetric_20cryptography',['Asymmetric cryptography',['../group__asymmetric.html',1,'']]]
+];
diff --git a/docs/html/search/groups_1.html b/docs/html/search/groups_1.html
new file mode 100644
index 0000000..979ea3d
--- /dev/null
+++ b/docs/html/search/groups_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/groups_1.js b/docs/html/search/groups_1.js
new file mode 100644
index 0000000..4ab58fc
--- /dev/null
+++ b/docs/html/search/groups_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['error_20codes',['Error codes',['../group__error.html',1,'']]]
+];
diff --git a/docs/html/search/groups_2.html b/docs/html/search/groups_2.html
new file mode 100644
index 0000000..310ab32
--- /dev/null
+++ b/docs/html/search/groups_2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/groups_2.js b/docs/html/search/groups_2.js
new file mode 100644
index 0000000..bb51584
--- /dev/null
+++ b/docs/html/search/groups_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['generators',['Generators',['../group__generators.html',1,'']]]
+];
diff --git a/docs/html/search/groups_3.html b/docs/html/search/groups_3.html
new file mode 100644
index 0000000..c24c7bd
--- /dev/null
+++ b/docs/html/search/groups_3.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/groups_3.js b/docs/html/search/groups_3.js
new file mode 100644
index 0000000..f48be25
--- /dev/null
+++ b/docs/html/search/groups_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['implementation_2dspecific_20definitions',['Implementation-specific definitions',['../group__platform.html',1,'']]]
+];
diff --git a/docs/html/search/groups_4.html b/docs/html/search/groups_4.html
new file mode 100644
index 0000000..a1f3533
--- /dev/null
+++ b/docs/html/search/groups_4.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/groups_4.js b/docs/html/search/groups_4.js
new file mode 100644
index 0000000..489c5ec
--- /dev/null
+++ b/docs/html/search/groups_4.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+  ['key_20and_20algorithm_20types',['Key and algorithm types',['../group__crypto__types.html',1,'']]],
+  ['key_20derivation',['Key derivation',['../group__derivation.html',1,'']]],
+  ['key_20import_20and_20export',['Key import and export',['../group__import__export.html',1,'']]],
+  ['key_20lifetimes',['Key lifetimes',['../group__key__lifetimes.html',1,'']]],
+  ['key_20management',['Key management',['../group__key__management.html',1,'']]],
+  ['key_20policies',['Key policies',['../group__policy.html',1,'']]]
+];
diff --git a/docs/html/search/groups_5.html b/docs/html/search/groups_5.html
new file mode 100644
index 0000000..938507d
--- /dev/null
+++ b/docs/html/search/groups_5.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/groups_5.js b/docs/html/search/groups_5.js
new file mode 100644
index 0000000..c72a68d
--- /dev/null
+++ b/docs/html/search/groups_5.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['library_20initialization',['Library initialization',['../group__initialization.html',1,'']]]
+];
diff --git a/docs/html/search/groups_6.html b/docs/html/search/groups_6.html
new file mode 100644
index 0000000..e675e85
--- /dev/null
+++ b/docs/html/search/groups_6.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/groups_6.js b/docs/html/search/groups_6.js
new file mode 100644
index 0000000..6efdddb
--- /dev/null
+++ b/docs/html/search/groups_6.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['message_20digests',['Message digests',['../group__hash.html',1,'']]],
+  ['message_20authentication_20codes',['Message authentication codes',['../group__MAC.html',1,'']]]
+];
diff --git a/docs/html/search/groups_7.html b/docs/html/search/groups_7.html
new file mode 100644
index 0000000..c974917
--- /dev/null
+++ b/docs/html/search/groups_7.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/groups_7.js b/docs/html/search/groups_7.js
new file mode 100644
index 0000000..2b3e593
--- /dev/null
+++ b/docs/html/search/groups_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['random_20generation',['Random generation',['../group__random.html',1,'']]]
+];
diff --git a/docs/html/search/groups_8.html b/docs/html/search/groups_8.html
new file mode 100644
index 0000000..863b2f7
--- /dev/null
+++ b/docs/html/search/groups_8.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/groups_8.js b/docs/html/search/groups_8.js
new file mode 100644
index 0000000..5161a09
--- /dev/null
+++ b/docs/html/search/groups_8.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['symmetric_20ciphers',['Symmetric ciphers',['../group__cipher.html',1,'']]]
+];
diff --git a/docs/html/search/mag_sel.png b/docs/html/search/mag_sel.png
new file mode 100644
index 0000000..81f6040
--- /dev/null
+++ b/docs/html/search/mag_sel.png
Binary files differ
diff --git a/docs/html/search/nomatches.html b/docs/html/search/nomatches.html
new file mode 100644
index 0000000..b1ded27
--- /dev/null
+++ b/docs/html/search/nomatches.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/search.css b/docs/html/search/search.css
new file mode 100644
index 0000000..4d7612f
--- /dev/null
+++ b/docs/html/search/search.css
@@ -0,0 +1,271 @@
+/*---------------- Search Box */
+
+#FSearchBox {
+    float: left;
+}
+
+#MSearchBox {
+    white-space : nowrap;
+    position: absolute;
+    float: none;
+    display: inline;
+    margin-top: 8px;
+    right: 0px;
+    width: 170px;
+    z-index: 102;
+    background-color: white;
+}
+
+#MSearchBox .left
+{
+    display:block;
+    position:absolute;
+    left:10px;
+    width:20px;
+    height:19px;
+    background:url('search_l.png') no-repeat;
+    background-position:right;
+}
+
+#MSearchSelect {
+    display:block;
+    position:absolute;
+    width:20px;
+    height:19px;
+}
+
+.left #MSearchSelect {
+    left:4px;
+}
+
+.right #MSearchSelect {
+    right:5px;
+}
+
+#MSearchField {
+    display:block;
+    position:absolute;
+    height:19px;
+    background:url('search_m.png') repeat-x;
+    border:none;
+    width:111px;
+    margin-left:20px;
+    padding-left:4px;
+    color: #909090;
+    outline: none;
+    font: 9pt Arial, Verdana, sans-serif;
+}
+
+#FSearchBox #MSearchField {
+    margin-left:15px;
+}
+
+#MSearchBox .right {
+    display:block;
+    position:absolute;
+    right:10px;
+    top:0px;
+    width:20px;
+    height:19px;
+    background:url('search_r.png') no-repeat;
+    background-position:left;
+}
+
+#MSearchClose {
+    display: none;
+    position: absolute;
+    top: 4px;
+    background : none;
+    border: none;
+    margin: 0px 4px 0px 0px;
+    padding: 0px 0px;
+    outline: none;
+}
+
+.left #MSearchClose {
+    left: 6px;
+}
+
+.right #MSearchClose {
+    right: 2px;
+}
+
+.MSearchBoxActive #MSearchField {
+    color: #000000;
+}
+
+/*---------------- Search filter selection */
+
+#MSearchSelectWindow {
+    display: none;
+    position: absolute;
+    left: 0; top: 0;
+    border: 1px solid #90A5CE;
+    background-color: #F9FAFC;
+    z-index: 1;
+    padding-top: 4px;
+    padding-bottom: 4px;
+    -moz-border-radius: 4px;
+    -webkit-border-top-left-radius: 4px;
+    -webkit-border-top-right-radius: 4px;
+    -webkit-border-bottom-left-radius: 4px;
+    -webkit-border-bottom-right-radius: 4px;
+    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.SelectItem {
+    font: 8pt Arial, Verdana, sans-serif;
+    padding-left:  2px;
+    padding-right: 12px;
+    border: 0px;
+}
+
+span.SelectionMark {
+    margin-right: 4px;
+    font-family: monospace;
+    outline-style: none;
+    text-decoration: none;
+}
+
+a.SelectItem {
+    display: block;
+    outline-style: none;
+    color: #000000; 
+    text-decoration: none;
+    padding-left:   6px;
+    padding-right: 12px;
+}
+
+a.SelectItem:focus,
+a.SelectItem:active {
+    color: #000000; 
+    outline-style: none;
+    text-decoration: none;
+}
+
+a.SelectItem:hover {
+    color: #FFFFFF;
+    background-color: #3D578C;
+    outline-style: none;
+    text-decoration: none;
+    cursor: pointer;
+    display: block;
+}
+
+/*---------------- Search results window */
+
+iframe#MSearchResults {
+    width: 60ex;
+    height: 15em;
+}
+
+#MSearchResultsWindow {
+    display: none;
+    position: absolute;
+    left: 0; top: 0;
+    border: 1px solid #000;
+    background-color: #EEF1F7;
+}
+
+/* ----------------------------------- */
+
+
+#SRIndex {
+    clear:both; 
+    padding-bottom: 15px;
+}
+
+.SREntry {
+    font-size: 10pt;
+    padding-left: 1ex;
+}
+
+.SRPage .SREntry {
+    font-size: 8pt;
+    padding: 1px 5px;
+}
+
+body.SRPage {
+    margin: 5px 2px;
+}
+
+.SRChildren {
+    padding-left: 3ex; padding-bottom: .5em 
+}
+
+.SRPage .SRChildren {
+    display: none;
+}
+
+.SRSymbol {
+    font-weight: bold; 
+    color: #425E97;
+    font-family: Arial, Verdana, sans-serif;
+    text-decoration: none;
+    outline: none;
+}
+
+a.SRScope {
+    display: block;
+    color: #425E97; 
+    font-family: Arial, Verdana, sans-serif;
+    text-decoration: none;
+    outline: none;
+}
+
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+    text-decoration: underline;
+}
+
+span.SRScope {
+    padding-left: 4px;
+}
+
+.SRPage .SRStatus {
+    padding: 2px 5px;
+    font-size: 8pt;
+    font-style: italic;
+}
+
+.SRResult {
+    display: none;
+}
+
+DIV.searchresults {
+    margin-left: 10px;
+    margin-right: 10px;
+}
+
+/*---------------- External search page results */
+
+.searchresult {
+    background-color: #F0F3F8;
+}
+
+.pages b {
+   color: white;
+   padding: 5px 5px 3px 5px;
+   background-image: url("../tab_a.png");
+   background-repeat: repeat-x;
+   text-shadow: 0 1px 1px #000000;
+}
+
+.pages {
+    line-height: 17px;
+    margin-left: 4px;
+    text-decoration: none;
+}
+
+.hl {
+    font-weight: bold;
+}
+
+#searchresults {
+    margin-bottom: 20px;
+}
+
+.searchpages {
+    margin-top: 10px;
+}
+
diff --git a/docs/html/search/search.js b/docs/html/search/search.js
new file mode 100644
index 0000000..dedce3b
--- /dev/null
+++ b/docs/html/search/search.js
@@ -0,0 +1,791 @@
+function convertToId(search)
+{
+  var result = '';
+  for (i=0;i<search.length;i++)
+  {
+    var c = search.charAt(i);
+    var cn = c.charCodeAt(0);
+    if (c.match(/[a-z0-9\u0080-\uFFFF]/))
+    {
+      result+=c;
+    }
+    else if (cn<16)
+    {
+      result+="_0"+cn.toString(16);
+    }
+    else
+    {
+      result+="_"+cn.toString(16);
+    }
+  }
+  return result;
+}
+
+function getXPos(item)
+{
+  var x = 0;
+  if (item.offsetWidth)
+  {
+    while (item && item!=document.body)
+    {
+      x   += item.offsetLeft;
+      item = item.offsetParent;
+    }
+  }
+  return x;
+}
+
+function getYPos(item)
+{
+  var y = 0;
+  if (item.offsetWidth)
+  {
+     while (item && item!=document.body)
+     {
+       y   += item.offsetTop;
+       item = item.offsetParent;
+     }
+  }
+  return y;
+}
+
+/* A class handling everything associated with the search panel.
+
+   Parameters:
+   name - The name of the global variable that will be
+          storing this instance.  Is needed to be able to set timeouts.
+   resultPath - path to use for external files
+*/
+function SearchBox(name, resultsPath, inFrame, label)
+{
+  if (!name || !resultsPath) {  alert("Missing parameters to SearchBox."); }
+
+  // ---------- Instance variables
+  this.name                  = name;
+  this.resultsPath           = resultsPath;
+  this.keyTimeout            = 0;
+  this.keyTimeoutLength      = 500;
+  this.closeSelectionTimeout = 300;
+  this.lastSearchValue       = "";
+  this.lastResultsPage       = "";
+  this.hideTimeout           = 0;
+  this.searchIndex           = 0;
+  this.searchActive          = false;
+  this.insideFrame           = inFrame;
+  this.searchLabel           = label;
+
+  // ----------- DOM Elements
+
+  this.DOMSearchField = function()
+  {  return document.getElementById("MSearchField");  }
+
+  this.DOMSearchSelect = function()
+  {  return document.getElementById("MSearchSelect");  }
+
+  this.DOMSearchSelectWindow = function()
+  {  return document.getElementById("MSearchSelectWindow");  }
+
+  this.DOMPopupSearchResults = function()
+  {  return document.getElementById("MSearchResults");  }
+
+  this.DOMPopupSearchResultsWindow = function()
+  {  return document.getElementById("MSearchResultsWindow");  }
+
+  this.DOMSearchClose = function()
+  {  return document.getElementById("MSearchClose"); }
+
+  this.DOMSearchBox = function()
+  {  return document.getElementById("MSearchBox");  }
+
+  // ------------ Event Handlers
+
+  // Called when focus is added or removed from the search field.
+  this.OnSearchFieldFocus = function(isActive)
+  {
+    this.Activate(isActive);
+  }
+
+  this.OnSearchSelectShow = function()
+  {
+    var searchSelectWindow = this.DOMSearchSelectWindow();
+    var searchField        = this.DOMSearchSelect();
+
+    if (this.insideFrame)
+    {
+      var left = getXPos(searchField);
+      var top  = getYPos(searchField);
+      left += searchField.offsetWidth + 6;
+      top += searchField.offsetHeight;
+
+      // show search selection popup
+      searchSelectWindow.style.display='block';
+      left -= searchSelectWindow.offsetWidth;
+      searchSelectWindow.style.left =  left + 'px';
+      searchSelectWindow.style.top  =  top  + 'px';
+    }
+    else
+    {
+      var left = getXPos(searchField);
+      var top  = getYPos(searchField);
+      top += searchField.offsetHeight;
+
+      // show search selection popup
+      searchSelectWindow.style.display='block';
+      searchSelectWindow.style.left =  left + 'px';
+      searchSelectWindow.style.top  =  top  + 'px';
+    }
+
+    // stop selection hide timer
+    if (this.hideTimeout)
+    {
+      clearTimeout(this.hideTimeout);
+      this.hideTimeout=0;
+    }
+    return false; // to avoid "image drag" default event
+  }
+
+  this.OnSearchSelectHide = function()
+  {
+    this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
+                                  this.closeSelectionTimeout);
+  }
+
+  // Called when the content of the search field is changed.
+  this.OnSearchFieldChange = function(evt)
+  {
+    if (this.keyTimeout) // kill running timer
+    {
+      clearTimeout(this.keyTimeout);
+      this.keyTimeout = 0;
+    }
+
+    var e  = (evt) ? evt : window.event; // for IE
+    if (e.keyCode==40 || e.keyCode==13)
+    {
+      if (e.shiftKey==1)
+      {
+        this.OnSearchSelectShow();
+        var win=this.DOMSearchSelectWindow();
+        for (i=0;i<win.childNodes.length;i++)
+        {
+          var child = win.childNodes[i]; // get span within a
+          if (child.className=='SelectItem')
+          {
+            child.focus();
+            return;
+          }
+        }
+        return;
+      }
+      else if (window.frames.MSearchResults.searchResults)
+      {
+        var elem = window.frames.MSearchResults.searchResults.NavNext(0);
+        if (elem) elem.focus();
+      }
+    }
+    else if (e.keyCode==27) // Escape out of the search field
+    {
+      this.DOMSearchField().blur();
+      this.DOMPopupSearchResultsWindow().style.display = 'none';
+      this.DOMSearchClose().style.display = 'none';
+      this.lastSearchValue = '';
+      this.Activate(false);
+      return;
+    }
+
+    // strip whitespaces
+    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+
+    if (searchValue != this.lastSearchValue) // search value has changed
+    {
+      if (searchValue != "") // non-empty search
+      {
+        // set timer for search update
+        this.keyTimeout = setTimeout(this.name + '.Search()',
+                                     this.keyTimeoutLength);
+      }
+      else // empty search field
+      {
+        this.DOMPopupSearchResultsWindow().style.display = 'none';
+        this.DOMSearchClose().style.display = 'none';
+        this.lastSearchValue = '';
+      }
+    }
+  }
+
+  this.SelectItemCount = function(id)
+  {
+    var count=0;
+    var win=this.DOMSearchSelectWindow();
+    for (i=0;i<win.childNodes.length;i++)
+    {
+      var child = win.childNodes[i]; // get span within a
+      if (child.className=='SelectItem')
+      {
+        count++;
+      }
+    }
+    return count;
+  }
+
+  this.SelectItemSet = function(id)
+  {
+    var i,j=0;
+    var win=this.DOMSearchSelectWindow();
+    for (i=0;i<win.childNodes.length;i++)
+    {
+      var child = win.childNodes[i]; // get span within a
+      if (child.className=='SelectItem')
+      {
+        var node = child.firstChild;
+        if (j==id)
+        {
+          node.innerHTML='&#8226;';
+        }
+        else
+        {
+          node.innerHTML='&#160;';
+        }
+        j++;
+      }
+    }
+  }
+
+  // Called when an search filter selection is made.
+  // set item with index id as the active item
+  this.OnSelectItem = function(id)
+  {
+    this.searchIndex = id;
+    this.SelectItemSet(id);
+    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+    if (searchValue!="" && this.searchActive) // something was found -> do a search
+    {
+      this.Search();
+    }
+  }
+
+  this.OnSearchSelectKey = function(evt)
+  {
+    var e = (evt) ? evt : window.event; // for IE
+    if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
+    {
+      this.searchIndex++;
+      this.OnSelectItem(this.searchIndex);
+    }
+    else if (e.keyCode==38 && this.searchIndex>0) // Up
+    {
+      this.searchIndex--;
+      this.OnSelectItem(this.searchIndex);
+    }
+    else if (e.keyCode==13 || e.keyCode==27)
+    {
+      this.OnSelectItem(this.searchIndex);
+      this.CloseSelectionWindow();
+      this.DOMSearchField().focus();
+    }
+    return false;
+  }
+
+  // --------- Actions
+
+  // Closes the results window.
+  this.CloseResultsWindow = function()
+  {
+    this.DOMPopupSearchResultsWindow().style.display = 'none';
+    this.DOMSearchClose().style.display = 'none';
+    this.Activate(false);
+  }
+
+  this.CloseSelectionWindow = function()
+  {
+    this.DOMSearchSelectWindow().style.display = 'none';
+  }
+
+  // Performs a search.
+  this.Search = function()
+  {
+    this.keyTimeout = 0;
+
+    // strip leading whitespace
+    var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
+
+    var code = searchValue.toLowerCase().charCodeAt(0);
+    var idxChar = searchValue.substr(0, 1).toLowerCase();
+    if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
+    {
+      idxChar = searchValue.substr(0, 2);
+    }
+
+    var resultsPage;
+    var resultsPageWithSearch;
+    var hasResultsPage;
+
+    var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
+    if (idx!=-1)
+    {
+       var hexCode=idx.toString(16);
+       resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
+       resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
+       hasResultsPage = true;
+    }
+    else // nothing available for this search term
+    {
+       resultsPage = this.resultsPath + '/nomatches.html';
+       resultsPageWithSearch = resultsPage;
+       hasResultsPage = false;
+    }
+
+    window.frames.MSearchResults.location = resultsPageWithSearch;
+    var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
+
+    if (domPopupSearchResultsWindow.style.display!='block')
+    {
+       var domSearchBox = this.DOMSearchBox();
+       this.DOMSearchClose().style.display = 'inline';
+       if (this.insideFrame)
+       {
+         var domPopupSearchResults = this.DOMPopupSearchResults();
+         domPopupSearchResultsWindow.style.position = 'relative';
+         domPopupSearchResultsWindow.style.display  = 'block';
+         var width = document.body.clientWidth - 8; // the -8 is for IE :-(
+         domPopupSearchResultsWindow.style.width    = width + 'px';
+         domPopupSearchResults.style.width          = width + 'px';
+       }
+       else
+       {
+         var domPopupSearchResults = this.DOMPopupSearchResults();
+         var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
+         var top  = getYPos(domSearchBox) + 20;  // domSearchBox.offsetHeight + 1;
+         domPopupSearchResultsWindow.style.display = 'block';
+         left -= domPopupSearchResults.offsetWidth;
+         domPopupSearchResultsWindow.style.top     = top  + 'px';
+         domPopupSearchResultsWindow.style.left    = left + 'px';
+       }
+    }
+
+    this.lastSearchValue = searchValue;
+    this.lastResultsPage = resultsPage;
+  }
+
+  // -------- Activation Functions
+
+  // Activates or deactivates the search panel, resetting things to
+  // their default values if necessary.
+  this.Activate = function(isActive)
+  {
+    if (isActive || // open it
+        this.DOMPopupSearchResultsWindow().style.display == 'block'
+       )
+    {
+      this.DOMSearchBox().className = 'MSearchBoxActive';
+
+      var searchField = this.DOMSearchField();
+
+      if (searchField.value == this.searchLabel) // clear "Search" term upon entry
+      {
+        searchField.value = '';
+        this.searchActive = true;
+      }
+    }
+    else if (!isActive) // directly remove the panel
+    {
+      this.DOMSearchBox().className = 'MSearchBoxInactive';
+      this.DOMSearchField().value   = this.searchLabel;
+      this.searchActive             = false;
+      this.lastSearchValue          = ''
+      this.lastResultsPage          = '';
+    }
+  }
+}
+
+// -----------------------------------------------------------------------
+
+// The class that handles everything on the search results page.
+function SearchResults(name)
+{
+    // The number of matches from the last run of <Search()>.
+    this.lastMatchCount = 0;
+    this.lastKey = 0;
+    this.repeatOn = false;
+
+    // Toggles the visibility of the passed element ID.
+    this.FindChildElement = function(id)
+    {
+      var parentElement = document.getElementById(id);
+      var element = parentElement.firstChild;
+
+      while (element && element!=parentElement)
+      {
+        if (element.nodeName == 'DIV' && element.className == 'SRChildren')
+        {
+          return element;
+        }
+
+        if (element.nodeName == 'DIV' && element.hasChildNodes())
+        {
+           element = element.firstChild;
+        }
+        else if (element.nextSibling)
+        {
+           element = element.nextSibling;
+        }
+        else
+        {
+          do
+          {
+            element = element.parentNode;
+          }
+          while (element && element!=parentElement && !element.nextSibling);
+
+          if (element && element!=parentElement)
+          {
+            element = element.nextSibling;
+          }
+        }
+      }
+    }
+
+    this.Toggle = function(id)
+    {
+      var element = this.FindChildElement(id);
+      if (element)
+      {
+        if (element.style.display == 'block')
+        {
+          element.style.display = 'none';
+        }
+        else
+        {
+          element.style.display = 'block';
+        }
+      }
+    }
+
+    // Searches for the passed string.  If there is no parameter,
+    // it takes it from the URL query.
+    //
+    // Always returns true, since other documents may try to call it
+    // and that may or may not be possible.
+    this.Search = function(search)
+    {
+      if (!search) // get search word from URL
+      {
+        search = window.location.search;
+        search = search.substring(1);  // Remove the leading '?'
+        search = unescape(search);
+      }
+
+      search = search.replace(/^ +/, ""); // strip leading spaces
+      search = search.replace(/ +$/, ""); // strip trailing spaces
+      search = search.toLowerCase();
+      search = convertToId(search);
+
+      var resultRows = document.getElementsByTagName("div");
+      var matches = 0;
+
+      var i = 0;
+      while (i < resultRows.length)
+      {
+        var row = resultRows.item(i);
+        if (row.className == "SRResult")
+        {
+          var rowMatchName = row.id.toLowerCase();
+          rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
+
+          if (search.length<=rowMatchName.length &&
+             rowMatchName.substr(0, search.length)==search)
+          {
+            row.style.display = 'block';
+            matches++;
+          }
+          else
+          {
+            row.style.display = 'none';
+          }
+        }
+        i++;
+      }
+      document.getElementById("Searching").style.display='none';
+      if (matches == 0) // no results
+      {
+        document.getElementById("NoMatches").style.display='block';
+      }
+      else // at least one result
+      {
+        document.getElementById("NoMatches").style.display='none';
+      }
+      this.lastMatchCount = matches;
+      return true;
+    }
+
+    // return the first item with index index or higher that is visible
+    this.NavNext = function(index)
+    {
+      var focusItem;
+      while (1)
+      {
+        var focusName = 'Item'+index;
+        focusItem = document.getElementById(focusName);
+        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+        {
+          break;
+        }
+        else if (!focusItem) // last element
+        {
+          break;
+        }
+        focusItem=null;
+        index++;
+      }
+      return focusItem;
+    }
+
+    this.NavPrev = function(index)
+    {
+      var focusItem;
+      while (1)
+      {
+        var focusName = 'Item'+index;
+        focusItem = document.getElementById(focusName);
+        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+        {
+          break;
+        }
+        else if (!focusItem) // last element
+        {
+          break;
+        }
+        focusItem=null;
+        index--;
+      }
+      return focusItem;
+    }
+
+    this.ProcessKeys = function(e)
+    {
+      if (e.type == "keydown")
+      {
+        this.repeatOn = false;
+        this.lastKey = e.keyCode;
+      }
+      else if (e.type == "keypress")
+      {
+        if (!this.repeatOn)
+        {
+          if (this.lastKey) this.repeatOn = true;
+          return false; // ignore first keypress after keydown
+        }
+      }
+      else if (e.type == "keyup")
+      {
+        this.lastKey = 0;
+        this.repeatOn = false;
+      }
+      return this.lastKey!=0;
+    }
+
+    this.Nav = function(evt,itemIndex)
+    {
+      var e  = (evt) ? evt : window.event; // for IE
+      if (e.keyCode==13) return true;
+      if (!this.ProcessKeys(e)) return false;
+
+      if (this.lastKey==38) // Up
+      {
+        var newIndex = itemIndex-1;
+        var focusItem = this.NavPrev(newIndex);
+        if (focusItem)
+        {
+          var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
+          if (child && child.style.display == 'block') // children visible
+          {
+            var n=0;
+            var tmpElem;
+            while (1) // search for last child
+            {
+              tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
+              if (tmpElem)
+              {
+                focusItem = tmpElem;
+              }
+              else // found it!
+              {
+                break;
+              }
+              n++;
+            }
+          }
+        }
+        if (focusItem)
+        {
+          focusItem.focus();
+        }
+        else // return focus to search field
+        {
+           parent.document.getElementById("MSearchField").focus();
+        }
+      }
+      else if (this.lastKey==40) // Down
+      {
+        var newIndex = itemIndex+1;
+        var focusItem;
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem && elem.style.display == 'block') // children visible
+        {
+          focusItem = document.getElementById('Item'+itemIndex+'_c0');
+        }
+        if (!focusItem) focusItem = this.NavNext(newIndex);
+        if (focusItem)  focusItem.focus();
+      }
+      else if (this.lastKey==39) // Right
+      {
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem) elem.style.display = 'block';
+      }
+      else if (this.lastKey==37) // Left
+      {
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem) elem.style.display = 'none';
+      }
+      else if (this.lastKey==27) // Escape
+      {
+        parent.searchBox.CloseResultsWindow();
+        parent.document.getElementById("MSearchField").focus();
+      }
+      else if (this.lastKey==13) // Enter
+      {
+        return true;
+      }
+      return false;
+    }
+
+    this.NavChild = function(evt,itemIndex,childIndex)
+    {
+      var e  = (evt) ? evt : window.event; // for IE
+      if (e.keyCode==13) return true;
+      if (!this.ProcessKeys(e)) return false;
+
+      if (this.lastKey==38) // Up
+      {
+        if (childIndex>0)
+        {
+          var newIndex = childIndex-1;
+          document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
+        }
+        else // already at first child, jump to parent
+        {
+          document.getElementById('Item'+itemIndex).focus();
+        }
+      }
+      else if (this.lastKey==40) // Down
+      {
+        var newIndex = childIndex+1;
+        var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
+        if (!elem) // last child, jump to parent next parent
+        {
+          elem = this.NavNext(itemIndex+1);
+        }
+        if (elem)
+        {
+          elem.focus();
+        }
+      }
+      else if (this.lastKey==27) // Escape
+      {
+        parent.searchBox.CloseResultsWindow();
+        parent.document.getElementById("MSearchField").focus();
+      }
+      else if (this.lastKey==13) // Enter
+      {
+        return true;
+      }
+      return false;
+    }
+}
+
+function setKeyActions(elem,action)
+{
+  elem.setAttribute('onkeydown',action);
+  elem.setAttribute('onkeypress',action);
+  elem.setAttribute('onkeyup',action);
+}
+
+function setClassAttr(elem,attr)
+{
+  elem.setAttribute('class',attr);
+  elem.setAttribute('className',attr);
+}
+
+function createResults()
+{
+  var results = document.getElementById("SRResults");
+  for (var e=0; e<searchData.length; e++)
+  {
+    var id = searchData[e][0];
+    var srResult = document.createElement('div');
+    srResult.setAttribute('id','SR_'+id);
+    setClassAttr(srResult,'SRResult');
+    var srEntry = document.createElement('div');
+    setClassAttr(srEntry,'SREntry');
+    var srLink = document.createElement('a');
+    srLink.setAttribute('id','Item'+e);
+    setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
+    setClassAttr(srLink,'SRSymbol');
+    srLink.innerHTML = searchData[e][1][0];
+    srEntry.appendChild(srLink);
+    if (searchData[e][1].length==2) // single result
+    {
+      srLink.setAttribute('href',searchData[e][1][1][0]);
+      if (searchData[e][1][1][1])
+      {
+       srLink.setAttribute('target','_parent');
+      }
+      var srScope = document.createElement('span');
+      setClassAttr(srScope,'SRScope');
+      srScope.innerHTML = searchData[e][1][1][2];
+      srEntry.appendChild(srScope);
+    }
+    else // multiple results
+    {
+      srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
+      var srChildren = document.createElement('div');
+      setClassAttr(srChildren,'SRChildren');
+      for (var c=0; c<searchData[e][1].length-1; c++)
+      {
+        var srChild = document.createElement('a');
+        srChild.setAttribute('id','Item'+e+'_c'+c);
+        setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
+        setClassAttr(srChild,'SRScope');
+        srChild.setAttribute('href',searchData[e][1][c+1][0]);
+        if (searchData[e][1][c+1][1])
+        {
+         srChild.setAttribute('target','_parent');
+        }
+        srChild.innerHTML = searchData[e][1][c+1][2];
+        srChildren.appendChild(srChild);
+      }
+      srEntry.appendChild(srChildren);
+    }
+    srResult.appendChild(srEntry);
+    results.appendChild(srResult);
+  }
+}
+
+function init_search()
+{
+  var results = document.getElementById("MSearchSelectWindow");
+  for (var key in indexSectionLabels)
+  {
+    var link = document.createElement('a');
+    link.setAttribute('class','SelectItem');
+    link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
+    link.href='javascript:void(0)';
+    link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key];
+    results.appendChild(link);
+  }
+  searchBox.OnSelectItem(0);
+}
+
diff --git a/docs/html/search/search_l.png b/docs/html/search/search_l.png
new file mode 100644
index 0000000..c872f4d
--- /dev/null
+++ b/docs/html/search/search_l.png
Binary files differ
diff --git a/docs/html/search/search_m.png b/docs/html/search/search_m.png
new file mode 100644
index 0000000..b429a16
--- /dev/null
+++ b/docs/html/search/search_m.png
Binary files differ
diff --git a/docs/html/search/search_r.png b/docs/html/search/search_r.png
new file mode 100644
index 0000000..97ee8b4
--- /dev/null
+++ b/docs/html/search/search_r.png
Binary files differ
diff --git a/docs/html/search/searchdata.js b/docs/html/search/searchdata.js
new file mode 100644
index 0000000..8384325
--- /dev/null
+++ b/docs/html/search/searchdata.js
@@ -0,0 +1,36 @@
+var indexSectionsWithContent =
+{
+  0: "acegiklmprs",
+  1: "p",
+  2: "c",
+  3: "p",
+  4: "e",
+  5: "p",
+  6: "p",
+  7: "aegiklmrs"
+};
+
+var indexSectionNames =
+{
+  0: "all",
+  1: "classes",
+  2: "files",
+  3: "functions",
+  4: "variables",
+  5: "typedefs",
+  6: "defines",
+  7: "groups"
+};
+
+var indexSectionLabels =
+{
+  0: "All",
+  1: "Classes",
+  2: "Files",
+  3: "Functions",
+  4: "Variables",
+  5: "Typedefs",
+  6: "Macros",
+  7: "Modules"
+};
+
diff --git a/docs/html/search/typedefs_0.html b/docs/html/search/typedefs_0.html
new file mode 100644
index 0000000..fb07195
--- /dev/null
+++ b/docs/html/search/typedefs_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="typedefs_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/typedefs_0.js b/docs/html/search/typedefs_0.js
new file mode 100644
index 0000000..5b2f6d2
--- /dev/null
+++ b/docs/html/search/typedefs_0.js
@@ -0,0 +1,18 @@
+var searchData=
+[
+  ['psa_5faead_5foperation_5ft',['psa_aead_operation_t',['../group__aead.html#ga14f6a01afbaa8c5b3d8c5d345cbaa3ed',1,'crypto.h']]],
+  ['psa_5falgorithm_5ft',['psa_algorithm_t',['../group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69',1,'crypto_types.h']]],
+  ['psa_5fcipher_5foperation_5ft',['psa_cipher_operation_t',['../group__cipher.html#ga1399de29db657e3737bb09927aae51fa',1,'crypto.h']]],
+  ['psa_5fcrypto_5fgenerator_5ft',['psa_crypto_generator_t',['../group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b',1,'crypto.h']]],
+  ['psa_5fecc_5fcurve_5ft',['psa_ecc_curve_t',['../group__crypto__types.html#ga4e8977c145cce5077c4bce7fec890ad9',1,'crypto_types.h']]],
+  ['psa_5fhash_5foperation_5ft',['psa_hash_operation_t',['../group__hash.html#ga3c4205d2ce66c4095fc5c78c25273fab',1,'crypto.h']]],
+  ['psa_5fkey_5fderivation_5fstep_5ft',['psa_key_derivation_step_t',['../group__derivation.html#gaac4eeacd36596c548b3a48fc06c5048b',1,'crypto_types.h']]],
+  ['psa_5fkey_5fhandle_5ft',['psa_key_handle_t',['../group__platform.html#gabf6d5fd4e2ea89ecd425c88f057e7f75',1,'crypto.h']]],
+  ['psa_5fkey_5fid_5ft',['psa_key_id_t',['../group__key__lifetimes.html#ga11e986351c65bd3dc3c0fe2cd9926e4b',1,'crypto_types.h']]],
+  ['psa_5fkey_5flifetime_5ft',['psa_key_lifetime_t',['../group__key__lifetimes.html#ga6821ff6dd39dc2bc370ded760ad8b0cf',1,'crypto_types.h']]],
+  ['psa_5fkey_5fpolicy_5ft',['psa_key_policy_t',['../group__policy.html#gaf553efd409845b6d09ff25ce2ba36607',1,'crypto.h']]],
+  ['psa_5fkey_5ftype_5ft',['psa_key_type_t',['../group__crypto__types.html#ga578159487dfc7096cb191b0d2befe628',1,'crypto_types.h']]],
+  ['psa_5fkey_5fusage_5ft',['psa_key_usage_t',['../group__policy.html#ga7bb9de71337e0e98de843aa7f9b55f25',1,'crypto_types.h']]],
+  ['psa_5fmac_5foperation_5ft',['psa_mac_operation_t',['../group__MAC.html#ga78f0838b0c4e3db28b26355624d4bd37',1,'crypto.h']]],
+  ['psa_5fstatus_5ft',['psa_status_t',['../group__error.html#ga05676e70ba5c6a7565aff3c36677c1f9',1,'crypto_types.h']]]
+];
diff --git a/docs/html/search/variables_0.html b/docs/html/search/variables_0.html
new file mode 100644
index 0000000..3835278
--- /dev/null
+++ b/docs/html/search/variables_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/variables_0.js b/docs/html/search/variables_0.js
new file mode 100644
index 0000000..9ba7121
--- /dev/null
+++ b/docs/html/search/variables_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['e',['e',['../structpsa__generate__key__extra__rsa.html#a53ccb9e4375f3c9af6e3ecfe111ce11d',1,'psa_generate_key_extra_rsa']]]
+];
diff --git a/docs/html/splitbar.png b/docs/html/splitbar.png
new file mode 100644
index 0000000..fe895f2
--- /dev/null
+++ b/docs/html/splitbar.png
Binary files differ
diff --git a/docs/html/structpsa__generate__key__extra__rsa-members.html b/docs/html/structpsa__generate__key__extra__rsa-members.html
new file mode 100644
index 0000000..f57ba95
--- /dev/null
+++ b/docs/html/structpsa__generate__key__extra__rsa-members.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">psa_generate_key_extra_rsa Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structpsa__generate__key__extra__rsa.html">psa_generate_key_extra_rsa</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="structpsa__generate__key__extra__rsa.html#a53ccb9e4375f3c9af6e3ecfe111ce11d">e</a></td><td class="entry"><a class="el" href="structpsa__generate__key__extra__rsa.html">psa_generate_key_extra_rsa</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/structpsa__generate__key__extra__rsa.html b/docs/html/structpsa__generate__key__extra__rsa.html
new file mode 100644
index 0000000..53170d9
--- /dev/null
+++ b/docs/html/structpsa__generate__key__extra__rsa.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Platform Security Architecture — cryptography and keystore interface: psa_generate_key_extra_rsa Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { init_search(); });
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Platform Security Architecture — cryptography and keystore interface
+   &#160;<span id="projectnumber">beta 1 — 2019-01-21</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="structpsa__generate__key__extra__rsa-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">psa_generate_key_extra_rsa Struct Reference<div class="ingroups"><a class="el" href="group__random.html">Random generation</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="crypto_8h_source.html">crypto.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a53ccb9e4375f3c9af6e3ecfe111ce11d"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpsa__generate__key__extra__rsa.html#a53ccb9e4375f3c9af6e3ecfe111ce11d">e</a></td></tr>
+<tr class="separator:a53ccb9e4375f3c9af6e3ecfe111ce11d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Extra parameters for RSA key generation.</p>
+<p>You may pass a pointer to a structure of this type as the <code>extra</code> parameter to <a class="el" href="group__random.html#ga72921520494b4f007a3afb904cd9ecdd" title="Generate a key or key pair. ">psa_generate_key()</a>. </p>
+</div><h2 class="groupheader">Member Data Documentation</h2>
+<a class="anchor" id="a53ccb9e4375f3c9af6e3ecfe111ce11d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t psa_generate_key_extra_rsa::e</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Public exponent value. Default: 65537. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>psa/<a class="el" href="crypto_8h_source.html">crypto.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
diff --git a/docs/html/sync_off.png b/docs/html/sync_off.png
new file mode 100644
index 0000000..3b443fc
--- /dev/null
+++ b/docs/html/sync_off.png
Binary files differ
diff --git a/docs/html/sync_on.png b/docs/html/sync_on.png
new file mode 100644
index 0000000..e08320f
--- /dev/null
+++ b/docs/html/sync_on.png
Binary files differ
diff --git a/docs/html/tab_a.png b/docs/html/tab_a.png
new file mode 100644
index 0000000..3b725c4
--- /dev/null
+++ b/docs/html/tab_a.png
Binary files differ
diff --git a/docs/html/tab_b.png b/docs/html/tab_b.png
new file mode 100644
index 0000000..e2b4a86
--- /dev/null
+++ b/docs/html/tab_b.png
Binary files differ
diff --git a/docs/html/tab_h.png b/docs/html/tab_h.png
new file mode 100644
index 0000000..fd5cb70
--- /dev/null
+++ b/docs/html/tab_h.png
Binary files differ
diff --git a/docs/html/tab_s.png b/docs/html/tab_s.png
new file mode 100644
index 0000000..ab478c9
--- /dev/null
+++ b/docs/html/tab_s.png
Binary files differ
diff --git a/docs/html/tabs.css b/docs/html/tabs.css
new file mode 100644
index 0000000..9cf578f
--- /dev/null
+++ b/docs/html/tabs.css
@@ -0,0 +1,60 @@
+.tabs, .tabs2, .tabs3 {
+    background-image: url('tab_b.png');
+    width: 100%;
+    z-index: 101;
+    font-size: 13px;
+    font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+.tabs2 {
+    font-size: 10px;
+}
+.tabs3 {
+    font-size: 9px;
+}
+
+.tablist {
+    margin: 0;
+    padding: 0;
+    display: table;
+}
+
+.tablist li {
+    float: left;
+    display: table-cell;
+    background-image: url('tab_b.png');
+    line-height: 36px;
+    list-style: none;
+}
+
+.tablist a {
+    display: block;
+    padding: 0 20px;
+    font-weight: bold;
+    background-image:url('tab_s.png');
+    background-repeat:no-repeat;
+    background-position:right;
+    color: #283A5D;
+    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+    text-decoration: none;
+    outline: none;
+}
+
+.tabs3 .tablist a {
+    padding: 0 10px;
+}
+
+.tablist a:hover {
+    background-image: url('tab_h.png');
+    background-repeat:repeat-x;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+    text-decoration: none;
+}
+
+.tablist li.current a {
+    background-image: url('tab_a.png');
+    background-repeat:repeat-x;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}