blob: db254cb274993a9f1b1ed6b605a0febee3abf448 [file] [log] [blame]
Gilles Peskine6c723a22020-04-17 16:57:52 +02001
Bence Szépkútie26ccad2021-02-01 14:26:11 +01002<!DOCTYPE html>
Gilles Peskine6c723a22020-04-17 16:57:52 +02003
4<html xmlns="http://www.w3.org/1999/xhtml">
5 <head>
Bence Szépkútie26ccad2021-02-01 14:26:11 +01006 <meta charset="utf-8" />
Gilles Peskinec2db5f02021-01-18 20:36:53 +01007 <title>9.5. Key policies &#8212; PSA Crypto API 1.0.1 documentation</title>
Gilles Peskine6c723a22020-04-17 16:57:52 +02008 <link rel="stylesheet" href="../../_static/alabaster.css" type="text/css" />
9 <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
Bence Szépkútie26ccad2021-02-01 14:26:11 +010010 <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
Gilles Peskine6c723a22020-04-17 16:57:52 +020011 <script type="text/javascript" src="../../_static/jquery.js"></script>
12 <script type="text/javascript" src="../../_static/underscore.js"></script>
13 <script type="text/javascript" src="../../_static/doctools.js"></script>
Bence Szépkútie26ccad2021-02-01 14:26:11 +010014 <script type="text/javascript" src="../../_static/language_data.js"></script>
Gilles Peskinec2db5f02021-01-18 20:36:53 +010015 <link rel="author" title="About these documents" href="../../about.html" />
Gilles Peskine6c723a22020-04-17 16:57:52 +020016 <link rel="index" title="Index" href="../../genindex.html" />
17 <link rel="search" title="Search" href="../../search.html" />
Gilles Peskinec2db5f02021-01-18 20:36:53 +010018 <link rel="next" title="9.6. Key management functions" href="management.html" />
19 <link rel="prev" title="9.4. Key identifiers" href="ids.html" />
Gilles Peskine6c723a22020-04-17 16:57:52 +020020
21 <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
22
Bence Szépkútie26ccad2021-02-01 14:26:11 +010023
Gilles Peskine6c723a22020-04-17 16:57:52 +020024 <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
25
Bence Szépkútie26ccad2021-02-01 14:26:11 +010026 </head><body>
Gilles Peskine6c723a22020-04-17 16:57:52 +020027
28
29 <div class="document">
30 <div class="documentwrapper">
31 <div class="bodywrapper">
Bence Szépkútie26ccad2021-02-01 14:26:11 +010032
33
Gilles Peskine6c723a22020-04-17 16:57:52 +020034 <div class="body" role="main">
35
36 <div class="section" id="key-policies">
Gilles Peskinec2db5f02021-01-18 20:36:53 +010037<span id="key-policy"></span><h1>9.5. Key policies</h1>
38<p>All keys have an associated policy that regulates which operations are permitted on the key. A key policy is composed of two elements:</p>
39<ul class="simple">
Bence Szépkútie26ccad2021-02-01 14:26:11 +010040<li><p>A set of usage flags. See <a class="reference internal" href="#key-usage-flags"><span class="secref">Key usage flags</span></a>.</p></li>
41<li><p>A specific algorithm that is permitted with the key. See <a class="reference internal" href="#permitted-algorithms"><span class="secref">Permitted algorithms</span></a>.</p></li>
Gilles Peskinec2db5f02021-01-18 20:36:53 +010042</ul>
Bence Szépkútie26ccad2021-02-01 14:26:11 +010043<p>The policy is part of the key attributes that are managed by a <a class="reference internal" href="attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t"><code class="xref any c c-type docutils literal notranslate"><span class="pre">psa_key_attributes_t</span></code></a> object.</p>
Gilles Peskinec2db5f02021-01-18 20:36:53 +010044<p>A highly constrained implementation might not be able to support all the policies that can be expressed through this interface. If an implementation cannot create a key with the required policy, it must return an appropriate error code when the key is created.</p>
45<div class="section" id="permitted-algorithms">
46<span id="id1"></span><h2>9.5.1. Permitted algorithms</h2>
47<p>The permitted algorithm is encoded using a algorithm identifier, as described in <a class="reference internal" href="../ops/algorithms.html#algorithms"><span class="secref">Algorithms</span></a>.</p>
48<p>This specification only defines policies that restrict keys to a single algorithm, which is consistent with both common practice and security good practice.</p>
49<p>The following algorithm policies are supported:</p>
50<ul class="simple">
Bence Szépkútie26ccad2021-02-01 14:26:11 +010051<li><p><a class="reference internal" href="../ops/algorithms.html#c.PSA_ALG_NONE" title="PSA_ALG_NONE"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_ALG_NONE</span></code></a> does not allow any cryptographic operation with the key. The key can still be used for non-cryptographic actions such as exporting, if permitted by the usage flags.</p></li>
52<li><p>A specific algorithm value permits this particular algorithm.</p></li>
53<li><p>A signature algorithm wildcard built from <a class="reference internal" href="../ops/sign.html#c.PSA_ALG_ANY_HASH" title="PSA_ALG_ANY_HASH"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_ALG_ANY_HASH</span></code></a> allows the specified signature scheme with any hash algorithm.</p></li>
Gilles Peskinec2db5f02021-01-18 20:36:53 +010054</ul>
55<p>When a key is used in a cryptographic operation, the application must supply the algorithm to use for the operation. This algorithm is checked against the key’s permitted algorithm policy.</p>
56<div class="section" id="psa_set_key_algorithm">
Bence Szépkútie26ccad2021-02-01 14:26:11 +010057<span id="c.psa_set_key_algorithm"></span><h3><code class="docutils literal notranslate"><span class="pre">psa_set_key_algorithm</span></code> (function)</h3>
Gilles Peskinec2db5f02021-01-18 20:36:53 +010058<p>Declare the permitted algorithm policy for a key.</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +010059<pre class="literal-block">void <a class="reference internal" href="#c.psa_set_key_algorithm" title="psa_set_key_algorithm">psa_set_key_algorithm</a>(<a class="reference internal" href="attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes,
60 <a class="reference internal" href="../ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg);</pre>
Gilles Peskinec2db5f02021-01-18 20:36:53 +010061<p class="rubric">Parameters</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +010062<dl class="simple">
63<dt> <code class="docutils literal notranslate"><span class="pre">attributes</span></code></dt><dd><p>The attribute object to write to.</p>
64</dd>
65<dt> <code class="docutils literal notranslate"><span class="pre">alg</span></code></dt><dd><p>The permitted algorithm to write.</p>
66</dd>
Gilles Peskinec2db5f02021-01-18 20:36:53 +010067</dl>
Bence Szépkútie26ccad2021-02-01 14:26:11 +010068<p class="rubric">Returns: <code class="docutils literal notranslate"><span class="pre">void</span></code></p>
Gilles Peskinec2db5f02021-01-18 20:36:53 +010069<p class="rubric">Description</p>
70<p>The permitted algorithm policy of a key encodes which algorithm or algorithms are permitted to be used with this key.</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +010071<p>This function overwrites any permitted algorithm policy previously set in <code class="docutils literal notranslate"><span class="pre">attributes</span></code>.</p>
Gilles Peskinec2db5f02021-01-18 20:36:53 +010072<div class="admonition-implementation-note admonition">
Bence Szépkútie26ccad2021-02-01 14:26:11 +010073<p class="admonition-title">Implementation note</p>
Gilles Peskinec2db5f02021-01-18 20:36:53 +010074<p>This is a simple accessor function that is not required to validate its inputs. The following approaches can be used to provide an efficient implementation:</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +010075<ul class="simple">
76<li><p>This function can be declared as <code class="docutils literal notranslate"><span class="pre">static</span></code> or <code class="docutils literal notranslate"><span class="pre">inline</span></code>, instead of using the default external linkage.</p></li>
77<li><p>This function can be provided as a function-like macro. In this form, the macro must evaluate each of its arguments exactly once, as if it was a function call.</p></li>
Gilles Peskinec2db5f02021-01-18 20:36:53 +010078</ul>
79</div>
80</div>
81<div class="section" id="psa_get_key_algorithm">
Bence Szépkútie26ccad2021-02-01 14:26:11 +010082<span id="c.psa_get_key_algorithm"></span><h3><code class="docutils literal notranslate"><span class="pre">psa_get_key_algorithm</span></code> (function)</h3>
Gilles Peskinec2db5f02021-01-18 20:36:53 +010083<p>Retrieve the permitted algorithm policy from key attributes.</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +010084<pre class="literal-block"><a class="reference internal" href="../ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> <a class="reference internal" href="#c.psa_get_key_algorithm" title="psa_get_key_algorithm">psa_get_key_algorithm</a>(const <a class="reference internal" href="attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes);</pre>
Gilles Peskinec2db5f02021-01-18 20:36:53 +010085<p class="rubric">Parameters</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +010086<dl class="simple">
87<dt> <code class="docutils literal notranslate"><span class="pre">attributes</span></code></dt><dd><p>The key attribute object to query.</p>
88</dd>
Gilles Peskinec2db5f02021-01-18 20:36:53 +010089</dl>
Bence Szépkútie26ccad2021-02-01 14:26:11 +010090<p class="rubric">Returns: <a class="reference internal" href="../ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t"><code class="docutils literal notranslate"><span class="pre">psa_algorithm_t</span></code></a></p>
Gilles Peskinec2db5f02021-01-18 20:36:53 +010091<p>The algorithm stored in the attribute object.</p>
92<p class="rubric">Description</p>
93<div class="admonition-implementation-note admonition">
Bence Szépkútie26ccad2021-02-01 14:26:11 +010094<p class="admonition-title">Implementation note</p>
Gilles Peskinec2db5f02021-01-18 20:36:53 +010095<p>This is a simple accessor function that is not required to validate its inputs. The following approaches can be used to provide an efficient implementation:</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +010096<ul class="simple">
97<li><p>This function can be declared as <code class="docutils literal notranslate"><span class="pre">static</span></code> or <code class="docutils literal notranslate"><span class="pre">inline</span></code>, instead of using the default external linkage.</p></li>
98<li><p>This function can be provided as a function-like macro. In this form, the macro must evaluate each of its arguments exactly once, as if it was a function call.</p></li>
Gilles Peskinec2db5f02021-01-18 20:36:53 +010099</ul>
100</div>
101</div>
102</div>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200103<div class="section" id="key-usage-flags">
Gilles Peskinec2db5f02021-01-18 20:36:53 +0100104<span id="id2"></span><h2>9.5.2. Key usage flags</h2>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100105<p>The usage flags are encoded in a bitmask, which has the type <a class="reference internal" href="#c.psa_key_usage_t" title="psa_key_usage_t"><code class="xref any c c-type docutils literal notranslate"><span class="pre">psa_key_usage_t</span></code></a>. Four kinds of usage flag can be specified:</p>
Gilles Peskinec2db5f02021-01-18 20:36:53 +0100106<ul class="simple">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100107<li><p>The extractable flag <a class="reference internal" href="#c.PSA_KEY_USAGE_EXPORT" title="PSA_KEY_USAGE_EXPORT"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_EXPORT</span></code></a> determines whether the key material can be extracted.</p></li>
108<li><p>The copyable flag <a class="reference internal" href="#c.PSA_KEY_USAGE_COPY" title="PSA_KEY_USAGE_COPY"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_COPY</span></code></a> determines whether the key material can be copied into a new key, which can have a different lifetime or a more restrictive policy.</p></li>
109<li><p>The cacheable flag <a class="reference internal" href="#c.PSA_KEY_USAGE_CACHE" title="PSA_KEY_USAGE_CACHE"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_CACHE</span></code></a> determines whether the implementation is permitted to retain non-essential copies of the key material in RAM. This policy only applies to persistent keys. See also <a class="reference internal" href="../../overview/implementation.html#key-material"><span class="secref">Managing key material</span></a>.</p></li>
110<li><p>The other usage flags, for example, <a class="reference internal" href="#c.PSA_KEY_USAGE_ENCRYPT" title="PSA_KEY_USAGE_ENCRYPT"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_ENCRYPT</span></code></a> and <a class="reference internal" href="#c.PSA_KEY_USAGE_SIGN_MESSAGE" title="PSA_KEY_USAGE_SIGN_MESSAGE"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_SIGN_MESSAGE</span></code></a>, determine whether the corresponding operation is permitted on the key.</p></li>
Gilles Peskinec2db5f02021-01-18 20:36:53 +0100111</ul>
112<div class="section" id="psa_key_usage_t">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100113<span id="c.psa_key_usage_t"></span><h3><code class="docutils literal notranslate"><span class="pre">psa_key_usage_t</span></code> (type)</h3>
Gilles Peskinec2db5f02021-01-18 20:36:53 +0100114<p>Encoding of permitted usage on a key.</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100115<pre class="literal-block">typedef uint32_t <a class="reference internal" href="#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>;</pre>
Gilles Peskinec2db5f02021-01-18 20:36:53 +0100116</div>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200117<div class="section" id="PSA_KEY_USAGE_EXPORT">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100118<span id="c.PSA_KEY_USAGE_EXPORT"></span><h3><code class="docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_EXPORT</span></code> (macro)</h3>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200119<p>Permission to export the key.</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100120<pre class="literal-block">#define <a class="reference internal" href="#c.PSA_KEY_USAGE_EXPORT" title="PSA_KEY_USAGE_EXPORT">PSA_KEY_USAGE_EXPORT</a> ((<a class="reference internal" href="#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00000001)</pre>
121<p>This flag allows the use of <a class="reference internal" href="management.html#c.psa_export_key" title="psa_export_key"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_export_key()</span></code></a> to export a key from the cryptoprocessor. A public key or the public part of a key pair can always be exported regardless of the value of this permission flag.</p>
122<p>This flag can also be required to copy a key using <a class="reference internal" href="management.html#c.psa_copy_key" title="psa_copy_key"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_copy_key()</span></code></a> outside of a secure element. See also <a class="reference internal" href="#c.PSA_KEY_USAGE_COPY" title="PSA_KEY_USAGE_COPY"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_COPY</span></code></a>.</p>
123<p>If a key does not have export permission, implementations must not allow the key to be exported in plain form from the cryptoprocessor, whether through <a class="reference internal" href="management.html#c.psa_export_key" title="psa_export_key"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_export_key()</span></code></a> or through a proprietary interface. The key might still be exportable in a wrapped form, i.e. in a form where it is encrypted by another key.</p>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200124</div>
125<div class="section" id="PSA_KEY_USAGE_COPY">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100126<span id="c.PSA_KEY_USAGE_COPY"></span><h3><code class="docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_COPY</span></code> (macro)</h3>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200127<p>Permission to copy the key.</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100128<pre class="literal-block">#define <a class="reference internal" href="#c.PSA_KEY_USAGE_COPY" title="PSA_KEY_USAGE_COPY">PSA_KEY_USAGE_COPY</a> ((<a class="reference internal" href="#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00000002)</pre>
129<p>This flag allows the use of <a class="reference internal" href="management.html#c.psa_copy_key" title="psa_copy_key"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_copy_key()</span></code></a> to make a copy of the key with the same policy or a more restrictive policy.</p>
130<p>For lifetimes for which the key is located in a secure element which enforce the non-exportability of keys, copying a key outside the secure element also requires the usage flag <a class="reference internal" href="#c.PSA_KEY_USAGE_EXPORT" title="PSA_KEY_USAGE_EXPORT"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_EXPORT</span></code></a>. Copying the key inside the secure element is permitted with just <a class="reference internal" href="#c.PSA_KEY_USAGE_COPY" title="PSA_KEY_USAGE_COPY"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_COPY</span></code></a> if the secure element supports it. For keys with the lifetime <a class="reference internal" href="lifetimes.html#c.PSA_KEY_LIFETIME_VOLATILE" title="PSA_KEY_LIFETIME_VOLATILE"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_LIFETIME_VOLATILE</span></code></a> or <a class="reference internal" href="lifetimes.html#c.PSA_KEY_LIFETIME_PERSISTENT" title="PSA_KEY_LIFETIME_PERSISTENT"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_LIFETIME_PERSISTENT</span></code></a>, the usage flag <a class="reference internal" href="#c.PSA_KEY_USAGE_COPY" title="PSA_KEY_USAGE_COPY"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_COPY</span></code></a> is sufficient to permit the copy.</p>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200131</div>
132<div class="section" id="PSA_KEY_USAGE_CACHE">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100133<span id="c.PSA_KEY_USAGE_CACHE"></span><h3><code class="docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_CACHE</span></code> (macro)</h3>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200134<p>Permission for the implementation to cache the key.</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100135<pre class="literal-block">#define <a class="reference internal" href="#c.PSA_KEY_USAGE_CACHE" title="PSA_KEY_USAGE_CACHE">PSA_KEY_USAGE_CACHE</a> ((<a class="reference internal" href="#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00000004)</pre>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200136<p>This flag allows the implementation to make additional copies of the key material that are not in storage and not for the purpose of an ongoing operation. Applications can use it as a hint to keep the key around for repeated access.</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100137<p>An application can request that cached key material is removed from memory by calling <a class="reference internal" href="management.html#c.psa_purge_key" title="psa_purge_key"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_purge_key()</span></code></a>.</p>
Gilles Peskinec2db5f02021-01-18 20:36:53 +0100138<p>The presence of this usage flag when creating a key is a hint:</p>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200139<ul class="simple">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100140<li><p>An implementation is not required to cache keys that have this usage flag.</p></li>
141<li><p>An implementation must not report an error if it does not cache keys.</p></li>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200142</ul>
Gilles Peskinec2db5f02021-01-18 20:36:53 +0100143<p>If this usage flag is not present, the implementation must ensure key material is removed from memory as soon as it is not required for an operation or for maintenance of a volatile key.</p>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200144<p>This flag must be preserved when reading back the attributes for all keys, regardless of key type or implementation behavior.</p>
Gilles Peskinec2db5f02021-01-18 20:36:53 +0100145<p>See also <a class="reference internal" href="../../overview/implementation.html#key-material"><span class="secref">Managing key material</span></a>.</p>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200146</div>
147<div class="section" id="PSA_KEY_USAGE_ENCRYPT">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100148<span id="c.PSA_KEY_USAGE_ENCRYPT"></span><h3><code class="docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_ENCRYPT</span></code> (macro)</h3>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200149<p>Permission to encrypt a message with the key.</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100150<pre class="literal-block">#define <a class="reference internal" href="#c.PSA_KEY_USAGE_ENCRYPT" title="PSA_KEY_USAGE_ENCRYPT">PSA_KEY_USAGE_ENCRYPT</a> ((<a class="reference internal" href="#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00000100)</pre>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200151<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. The flag must be present on keys used with the following APIs:</p>
152<ul class="simple">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100153<li><p><a class="reference internal" href="../ops/ciphers.html#c.psa_cipher_encrypt" title="psa_cipher_encrypt"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_cipher_encrypt()</span></code></a></p></li>
154<li><p><a class="reference internal" href="../ops/ciphers.html#c.psa_cipher_encrypt_setup" title="psa_cipher_encrypt_setup"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_cipher_encrypt_setup()</span></code></a></p></li>
155<li><p><a class="reference internal" href="../ops/aead.html#c.psa_aead_encrypt" title="psa_aead_encrypt"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_aead_encrypt()</span></code></a></p></li>
156<li><p><a class="reference internal" href="../ops/aead.html#c.psa_aead_encrypt_setup" title="psa_aead_encrypt_setup"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_aead_encrypt_setup()</span></code></a></p></li>
157<li><p><a class="reference internal" href="../ops/pke.html#c.psa_asymmetric_encrypt" title="psa_asymmetric_encrypt"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_asymmetric_encrypt()</span></code></a></p></li>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200158</ul>
159<p>For a key pair, this concerns the public key.</p>
160</div>
161<div class="section" id="PSA_KEY_USAGE_DECRYPT">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100162<span id="c.PSA_KEY_USAGE_DECRYPT"></span><h3><code class="docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_DECRYPT</span></code> (macro)</h3>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200163<p>Permission to decrypt a message with the key.</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100164<pre class="literal-block">#define <a class="reference internal" href="#c.PSA_KEY_USAGE_DECRYPT" title="PSA_KEY_USAGE_DECRYPT">PSA_KEY_USAGE_DECRYPT</a> ((<a class="reference internal" href="#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00000200)</pre>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200165<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. The flag must be present on keys used with the following APIs:</p>
166<ul class="simple">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100167<li><p><a class="reference internal" href="../ops/ciphers.html#c.psa_cipher_decrypt" title="psa_cipher_decrypt"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_cipher_decrypt()</span></code></a></p></li>
168<li><p><a class="reference internal" href="../ops/ciphers.html#c.psa_cipher_decrypt_setup" title="psa_cipher_decrypt_setup"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_cipher_decrypt_setup()</span></code></a></p></li>
169<li><p><a class="reference internal" href="../ops/aead.html#c.psa_aead_decrypt" title="psa_aead_decrypt"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_aead_decrypt()</span></code></a></p></li>
170<li><p><a class="reference internal" href="../ops/aead.html#c.psa_aead_decrypt_setup" title="psa_aead_decrypt_setup"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_aead_decrypt_setup()</span></code></a></p></li>
171<li><p><a class="reference internal" href="../ops/pke.html#c.psa_asymmetric_decrypt" title="psa_asymmetric_decrypt"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_asymmetric_decrypt()</span></code></a></p></li>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200172</ul>
173<p>For a key pair, this concerns the private key.</p>
174</div>
175<div class="section" id="PSA_KEY_USAGE_SIGN_MESSAGE">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100176<span id="c.PSA_KEY_USAGE_SIGN_MESSAGE"></span><h3><code class="docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_SIGN_MESSAGE</span></code> (macro)</h3>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200177<p>Permission to sign a message with the key.</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100178<pre class="literal-block">#define <a class="reference internal" href="#c.PSA_KEY_USAGE_SIGN_MESSAGE" title="PSA_KEY_USAGE_SIGN_MESSAGE">PSA_KEY_USAGE_SIGN_MESSAGE</a> ((<a class="reference internal" href="#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00000400)</pre>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200179<p>This flag allows the key to be used for a MAC calculation operation or for an asymmetric message signature operation, if otherwise permitted by the key’s type and policy. The flag must be present on keys used with the following APIs:</p>
180<ul class="simple">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100181<li><p><a class="reference internal" href="../ops/macs.html#c.psa_mac_compute" title="psa_mac_compute"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_mac_compute()</span></code></a></p></li>
182<li><p><a class="reference internal" href="../ops/macs.html#c.psa_mac_sign_setup" title="psa_mac_sign_setup"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_mac_sign_setup()</span></code></a></p></li>
183<li><p><a class="reference internal" href="../ops/sign.html#c.psa_sign_message" title="psa_sign_message"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_sign_message()</span></code></a></p></li>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200184</ul>
185<p>For a key pair, this concerns the private key.</p>
186</div>
187<div class="section" id="PSA_KEY_USAGE_VERIFY_MESSAGE">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100188<span id="c.PSA_KEY_USAGE_VERIFY_MESSAGE"></span><h3><code class="docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_VERIFY_MESSAGE</span></code> (macro)</h3>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200189<p>Permission to verify a message signature with the key.</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100190<pre class="literal-block">#define <a class="reference internal" href="#c.PSA_KEY_USAGE_VERIFY_MESSAGE" title="PSA_KEY_USAGE_VERIFY_MESSAGE">PSA_KEY_USAGE_VERIFY_MESSAGE</a> ((<a class="reference internal" href="#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00000800)</pre>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200191<p>This flag allows the key to be used for a MAC verification operation or for an asymmetric message signature verification operation, if otherwise permitted by the key’s type and policy. The flag must be present on keys used with the following APIs:</p>
192<ul class="simple">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100193<li><p><a class="reference internal" href="../ops/macs.html#c.psa_mac_verify" title="psa_mac_verify"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_mac_verify()</span></code></a></p></li>
194<li><p><a class="reference internal" href="../ops/macs.html#c.psa_mac_verify_setup" title="psa_mac_verify_setup"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_mac_verify_setup()</span></code></a></p></li>
195<li><p><a class="reference internal" href="../ops/sign.html#c.psa_verify_message" title="psa_verify_message"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_verify_message()</span></code></a></p></li>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200196</ul>
197<p>For a key pair, this concerns the public key.</p>
198</div>
199<div class="section" id="PSA_KEY_USAGE_SIGN_HASH">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100200<span id="c.PSA_KEY_USAGE_SIGN_HASH"></span><h3><code class="docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_SIGN_HASH</span></code> (macro)</h3>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200201<p>Permission to sign a message hash with the key.</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100202<pre class="literal-block">#define <a class="reference internal" href="#c.PSA_KEY_USAGE_SIGN_HASH" title="PSA_KEY_USAGE_SIGN_HASH">PSA_KEY_USAGE_SIGN_HASH</a> ((<a class="reference internal" href="#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00001000)</pre>
203<p>This flag allows the key to be used to sign a message hash as part of an asymmetric signature operation, if otherwise permitted by the key’s type and policy. The flag must be present on keys used when calling <a class="reference internal" href="../ops/sign.html#c.psa_sign_hash" title="psa_sign_hash"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_sign_hash()</span></code></a>.</p>
204<p>This flag automatically sets <a class="reference internal" href="#c.PSA_KEY_USAGE_SIGN_MESSAGE" title="PSA_KEY_USAGE_SIGN_MESSAGE"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_SIGN_MESSAGE</span></code></a>: if an application sets the flag <a class="reference internal" href="#c.PSA_KEY_USAGE_SIGN_HASH" title="PSA_KEY_USAGE_SIGN_HASH"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_SIGN_HASH</span></code></a> when creating a key, then the key always has the permissions conveyed by <a class="reference internal" href="#c.PSA_KEY_USAGE_SIGN_MESSAGE" title="PSA_KEY_USAGE_SIGN_MESSAGE"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_SIGN_MESSAGE</span></code></a>, and the flag <a class="reference internal" href="#c.PSA_KEY_USAGE_SIGN_MESSAGE" title="PSA_KEY_USAGE_SIGN_MESSAGE"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_SIGN_MESSAGE</span></code></a> will also be present when the application queries the usage flags of the key.</p>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200205<p>For a key pair, this concerns the private key.</p>
206</div>
207<div class="section" id="PSA_KEY_USAGE_VERIFY_HASH">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100208<span id="c.PSA_KEY_USAGE_VERIFY_HASH"></span><h3><code class="docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_VERIFY_HASH</span></code> (macro)</h3>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200209<p>Permission to verify a message hash with the key.</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100210<pre class="literal-block">#define <a class="reference internal" href="#c.PSA_KEY_USAGE_VERIFY_HASH" title="PSA_KEY_USAGE_VERIFY_HASH">PSA_KEY_USAGE_VERIFY_HASH</a> ((<a class="reference internal" href="#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00002000)</pre>
211<p>This flag allows the key to be used to verify a message hash as part of an asymmetric signature verification operation, if otherwise permitted by the key’s type and policy. The flag must be present on keys used when calling <a class="reference internal" href="../ops/sign.html#c.psa_verify_hash" title="psa_verify_hash"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_verify_hash()</span></code></a>.</p>
212<p>This flag automatically sets <a class="reference internal" href="#c.PSA_KEY_USAGE_VERIFY_MESSAGE" title="PSA_KEY_USAGE_VERIFY_MESSAGE"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_VERIFY_MESSAGE</span></code></a>: if an application sets the flag <a class="reference internal" href="#c.PSA_KEY_USAGE_VERIFY_HASH" title="PSA_KEY_USAGE_VERIFY_HASH"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_VERIFY_HASH</span></code></a> when creating a key, then the key always has the permissions conveyed by <a class="reference internal" href="#c.PSA_KEY_USAGE_VERIFY_MESSAGE" title="PSA_KEY_USAGE_VERIFY_MESSAGE"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_VERIFY_MESSAGE</span></code></a>, and the flag <a class="reference internal" href="#c.PSA_KEY_USAGE_VERIFY_MESSAGE" title="PSA_KEY_USAGE_VERIFY_MESSAGE"><code class="xref any c c-macro docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_VERIFY_MESSAGE</span></code></a> will also be present when the application queries the usage flags of the key.</p>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200213<p>For a key pair, this concerns the public key.</p>
214</div>
215<div class="section" id="PSA_KEY_USAGE_DERIVE">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100216<span id="c.PSA_KEY_USAGE_DERIVE"></span><h3><code class="docutils literal notranslate"><span class="pre">PSA_KEY_USAGE_DERIVE</span></code> (macro)</h3>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200217<p>Permission to derive other keys from this key.</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100218<pre class="literal-block">#define <a class="reference internal" href="#c.PSA_KEY_USAGE_DERIVE" title="PSA_KEY_USAGE_DERIVE">PSA_KEY_USAGE_DERIVE</a> ((<a class="reference internal" href="#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00004000)</pre>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200219<p>This flag allows the key to be used for a key derivation operation or for a key agreement operation, if otherwise permitted by by the key’s type and policy. The flag must be present on keys used with the following APIs:</p>
220<ul class="simple">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100221<li><p><a class="reference internal" href="../ops/kdf.html#c.psa_key_derivation_input_key" title="psa_key_derivation_input_key"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_key_derivation_input_key()</span></code></a></p></li>
222<li><p><a class="reference internal" href="../ops/ka.html#c.psa_key_derivation_key_agreement" title="psa_key_derivation_key_agreement"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_key_derivation_key_agreement()</span></code></a></p></li>
223<li><p><a class="reference internal" href="../ops/ka.html#c.psa_raw_key_agreement" title="psa_raw_key_agreement"><code class="xref any c c-func docutils literal notranslate"><span class="pre">psa_raw_key_agreement()</span></code></a></p></li>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200224</ul>
225</div>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200226<div class="section" id="psa_set_key_usage_flags">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100227<span id="c.psa_set_key_usage_flags"></span><h3><code class="docutils literal notranslate"><span class="pre">psa_set_key_usage_flags</span></code> (function)</h3>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200228<p>Declare usage flags for a key.</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100229<pre class="literal-block">void <a class="reference internal" href="#c.psa_set_key_usage_flags" title="psa_set_key_usage_flags">psa_set_key_usage_flags</a>(<a class="reference internal" href="attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes,
230 <a class="reference internal" href="#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a> usage_flags);</pre>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200231<p class="rubric">Parameters</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100232<dl class="simple">
233<dt> <code class="docutils literal notranslate"><span class="pre">attributes</span></code></dt><dd><p>The attribute object to write to.</p>
234</dd>
235<dt> <code class="docutils literal notranslate"><span class="pre">usage_flags</span></code></dt><dd><p>The usage flags to write.</p>
236</dd>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200237</dl>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100238<p class="rubric">Returns: <code class="docutils literal notranslate"><span class="pre">void</span></code></p>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200239<p class="rubric">Description</p>
Gilles Peskinec2db5f02021-01-18 20:36:53 +0100240<p>Usage flags are part of a key’s policy. They encode what kind of operations are permitted on the key. For more details, see <a class="reference internal" href="#key-policy"><span class="secref">Key policies</span></a>.</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100241<p>This function overwrites any usage flags previously set in <code class="docutils literal notranslate"><span class="pre">attributes</span></code>.</p>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200242<div class="admonition-implementation-note admonition">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100243<p class="admonition-title">Implementation note</p>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200244<p>This is a simple accessor function that is not required to validate its inputs. The following approaches can be used to provide an efficient implementation:</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100245<ul class="simple">
246<li><p>This function can be declared as <code class="docutils literal notranslate"><span class="pre">static</span></code> or <code class="docutils literal notranslate"><span class="pre">inline</span></code>, instead of using the default external linkage.</p></li>
247<li><p>This function can be provided as a function-like macro. In this form, the macro must evaluate each of its arguments exactly once, as if it was a function call.</p></li>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200248</ul>
249</div>
250</div>
251<div class="section" id="psa_get_key_usage_flags">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100252<span id="c.psa_get_key_usage_flags"></span><h3><code class="docutils literal notranslate"><span class="pre">psa_get_key_usage_flags</span></code> (function)</h3>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200253<p>Retrieve the usage flags from key attributes.</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100254<pre class="literal-block"><a class="reference internal" href="#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a> <a class="reference internal" href="#c.psa_get_key_usage_flags" title="psa_get_key_usage_flags">psa_get_key_usage_flags</a>(const <a class="reference internal" href="attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes);</pre>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200255<p class="rubric">Parameters</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100256<dl class="simple">
257<dt> <code class="docutils literal notranslate"><span class="pre">attributes</span></code></dt><dd><p>The key attribute object to query.</p>
258</dd>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200259</dl>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100260<p class="rubric">Returns: <a class="reference internal" href="#c.psa_key_usage_t" title="psa_key_usage_t"><code class="docutils literal notranslate"><span class="pre">psa_key_usage_t</span></code></a></p>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200261<p>The usage flags stored in the attribute object.</p>
262<p class="rubric">Description</p>
263<div class="admonition-implementation-note admonition">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100264<p class="admonition-title">Implementation note</p>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200265<p>This is a simple accessor function that is not required to validate its inputs. The following approaches can be used to provide an efficient implementation:</p>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100266<ul class="simple">
267<li><p>This function can be declared as <code class="docutils literal notranslate"><span class="pre">static</span></code> or <code class="docutils literal notranslate"><span class="pre">inline</span></code>, instead of using the default external linkage.</p></li>
268<li><p>This function can be provided as a function-like macro. In this form, the macro must evaluate each of its arguments exactly once, as if it was a function call.</p></li>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200269</ul>
270</div>
271</div>
272</div>
273</div>
274
275
276 </div>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100277
Gilles Peskine6c723a22020-04-17 16:57:52 +0200278 </div>
279 </div>
280 <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
Gilles Peskinec2db5f02021-01-18 20:36:53 +0100281 <div class="sphinxsidebarwrapper"><h3><a href="../../index.html"><b>PSA Crypto API</b></a></h3>
282IHI 0086<br/>
283Non-confidential<br/>
284Version 1.0.1
285<span style="color: red; font-weight: bold;"></span>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200286<ul>
Gilles Peskinec2db5f02021-01-18 20:36:53 +0100287<li class="toctree-l1"><a class="reference internal" href="../../about.html">About this document</a></li>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200288</ul>
Gilles Peskinec2db5f02021-01-18 20:36:53 +0100289<ul class="current">
290<li class="toctree-l1"><a class="reference internal" href="../../overview/intro.html">1. Introduction</a></li>
291<li class="toctree-l1"><a class="reference internal" href="../../overview/goals.html">2. Design goals</a></li>
292<li class="toctree-l1"><a class="reference internal" href="../../overview/functionality.html">3. Functionality overview</a></li>
293<li class="toctree-l1"><a class="reference internal" href="../../overview/sample-arch.html">4. Sample architectures</a></li>
294<li class="toctree-l1"><a class="reference internal" href="../../overview/conventions.html">5. Library conventions</a></li>
295<li class="toctree-l1"><a class="reference internal" href="../../overview/implementation.html">6. Implementation considerations</a></li>
296<li class="toctree-l1"><a class="reference internal" href="../../overview/usage.html">7. Usage considerations</a></li>
297<li class="toctree-l1"><a class="reference internal" href="../library/index.html">8. Library management reference</a></li>
298<li class="toctree-l1 current"><a class="reference internal" href="index.html">9. Key management reference</a><ul class="current">
299<li class="toctree-l2"><a class="reference internal" href="attributes.html">9.1. Key attributes</a></li>
300<li class="toctree-l2"><a class="reference internal" href="types.html">9.2. Key types</a></li>
301<li class="toctree-l2"><a class="reference internal" href="lifetimes.html">9.3. Key lifetimes</a></li>
302<li class="toctree-l2"><a class="reference internal" href="ids.html">9.4. Key identifiers</a></li>
303<li class="toctree-l2 current"><a class="current reference internal" href="#">9.5. Key policies</a><ul>
304<li class="toctree-l3"><a class="reference internal" href="#permitted-algorithms">9.5.1. Permitted algorithms</a></li>
305<li class="toctree-l3"><a class="reference internal" href="#key-usage-flags">9.5.2. Key usage flags</a></li>
306</ul>
307</li>
308<li class="toctree-l2"><a class="reference internal" href="management.html">9.6. Key management functions</a></li>
309</ul>
310</li>
311<li class="toctree-l1"><a class="reference internal" href="../ops/index.html">10. Cryptographic operation reference</a></li>
312</ul>
313<ul>
314<li class="toctree-l1"><a class="reference internal" href="../../appendix/example_header.html">Example header file</a></li>
315<li class="toctree-l1"><a class="reference internal" href="../../appendix/specdef_values.html">Example macro implementations</a></li>
316<li class="toctree-l1"><a class="reference internal" href="../../appendix/history.html">Changes to the API</a></li>
317</ul>
318<ul>
319<li class="toctree-l1"><a class="reference internal" href="../../psa_c-identifiers.html">Index of API elements</a></li>
320</ul>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200321<div id="searchbox" style="display: none" role="search">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100322 <h3 id="searchlabel">Quick search</h3>
323 <div class="searchformwrapper">
Gilles Peskine6c723a22020-04-17 16:57:52 +0200324 <form class="search" action="../../search.html" method="get">
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100325 <input type="text" name="q" aria-labelledby="searchlabel" />
326 <input type="submit" value="Go" />
Gilles Peskine6c723a22020-04-17 16:57:52 +0200327 </form>
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100328 </div>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200329</div>
330<script type="text/javascript">$('#searchbox').show(0);</script>
331 </div>
332 </div>
333 <div class="clearer"></div>
334 </div>
335 <div class="footer">
Gilles Peskinec2db5f02021-01-18 20:36:53 +0100336 &copy; 2018-2020, Arm Limited or its affiliates. All rights reserved.
Gilles Peskine6c723a22020-04-17 16:57:52 +0200337
338 |
Bence Szépkútie26ccad2021-02-01 14:26:11 +0100339 Powered by <a href="http://sphinx-doc.org/">Sphinx 2.1.2</a>
340 &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
Gilles Peskine6c723a22020-04-17 16:57:52 +0200341
Gilles Peskine6c723a22020-04-17 16:57:52 +0200342 </div>
343
344
345
346
347 </body>
348</html>