Replace HTML files by redirection to the official spec hosting
Use HTML redirects since we can't do HTTP redirects on GitHub pages.
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
diff --git a/docs/1.1.0/html/appendix/encodings.html b/docs/1.1.0/html/appendix/encodings.html
index 6bbad22..8ed592f 100644
--- a/docs/1.1.0/html/appendix/encodings.html
+++ b/docs/1.1.0/html/appendix/encodings.html
@@ -1,1145 +1 @@
-
-<!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/html; charset=utf-8" />
- <title>Algorithm and key type encoding — PSA Crypto API 1.1.0 documentation</title>
- <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '1.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: false,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="author" title="About these documents" href="../about.html" />
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Example macro implementations" href="specdef_values.html" />
- <link rel="prev" title="Example header file" href="example_header.html" />
-
- <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
-
- <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
- </head>
- <body>
-
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="algorithm-and-key-type-encoding">
-<span id="appendix-encodings"></span><h1>Algorithm and key type encoding</h1>
-<p>Algorithm identifiers (<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t"><code class="xref any c c-type docutils literal"><span class="pre">psa_algorithm_t</span></code></a>) and key types (<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t"><code class="xref any c c-type docutils literal"><span class="pre">psa_key_type_t</span></code></a>) in the PSA Crypto API are structured integer values.</p>
-<ul class="simple">
-<li><a class="reference internal" href="#algorithm-encoding"><span class="secref">Algorithm identifier encoding</span></a> describes the encoding scheme for algorithm identifiers</li>
-<li><a class="reference internal" href="#key-type-encoding"><span class="secref">Key type encoding</span></a> describes the encoding scheme for key types</li>
-</ul>
-<div class="section" id="algorithm-identifier-encoding">
-<span id="algorithm-encoding"></span><h2>Algorithm identifier encoding</h2>
-<p>Algorithm identifiers are 32-bit integer values of the type <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t"><code class="xref any c c-type docutils literal"><span class="pre">psa_algorithm_t</span></code></a>. Algorithm identifier values have the structure shown in <span><a class="reference internal" href="#fig-algorithm-fields"><span class="numref">Figure 1</span></a></span>.</p>
-<div class="figure" id="fig-algorithm-fields">
-<img alt="../_images/algorithm_fields.svg" src="../_images/algorithm_fields.svg" /><p class="caption"><span class="caption-number">Figure 1 </span><span class="caption-text">Encoding of <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t"><code class="xref any c c-type docutils literal"><span class="pre">psa_algorithm_t</span></code></a></span></p>
-</div>
-<p><span><a class="reference internal" href="#table-algorithm-fields"><span class="numref">Table 6</span></a></span> describes the meaning of the bit-fields — some of the bit-fields are used in different ways by different algorithm categories.</p>
-<table border="1" class="colwidths-given longtable docutils align-right" id="table-algorithm-fields">
-<caption><span class="caption-number">Table 6 </span><span class="caption-text">Bit fields in an algorithm identifier</span></caption>
-<colgroup>
-<col width="10%" />
-<col width="10%" />
-<col width="81%" />
-</colgroup>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Field</th>
-<th class="head">Bits</th>
-<th class="head">Description</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>V</td>
-<td>[31]</td>
-<td><p class="first">Flag to indicate an implementation-defined algorithm identifier, when V=1.</p>
-<p class="last">Algorithm identifiers defined by this specification always have V=0.</p>
-</td>
-</tr>
-<tr class="row-odd"><td>CAT</td>
-<td>[30:24]</td>
-<td>Algorithm category. See <a class="reference internal" href="#algorithm-category"><span class="secref">Algorithm categories</span></a>.</td>
-</tr>
-<tr class="row-even"><td>S</td>
-<td>[23]</td>
-<td><p class="first">For a cipher algorithm, this flag indicates a stream cipher when S=1.</p>
-<p class="last">For a key derivation algorithm, this flag indicates a key-stretching or password-hashing algorithm when S=1.</p>
-</td>
-</tr>
-<tr class="row-odd"><td>B</td>
-<td>[22]</td>
-<td>Flag to indicate an algorithm built on a block cipher, when B=1.</td>
-</tr>
-<tr class="row-even"><td>LEN/T2</td>
-<td>[21:16]</td>
-<td>LEN is the length of a MAC or AEAD tag, T2 is a key agreement algorithm sub-type.</td>
-</tr>
-<tr class="row-odd"><td>T1</td>
-<td>[15:8]</td>
-<td>Algorithm sub-type for most algorithm categories.</td>
-</tr>
-<tr class="row-even"><td>H</td>
-<td>[7:0]</td>
-<td>Hash algorithm sub-type, also used in any algorithm that is parameterized by a hash.</td>
-</tr>
-</tbody>
-</table>
-<div class="section" id="algorithm-categories">
-<span id="algorithm-category"></span><h3>Algorithm categories</h3>
-<p>The CAT field in an algorithm identifier takes the values shown in <span><a class="reference internal" href="#table-algorithm-category"><span class="numref">Table 7</span></a></span>.</p>
-<table border="1" class="colwidths-auto docutils align-left" id="table-algorithm-category">
-<caption><span class="caption-number">Table 7 </span><span class="caption-text">Algorithm identifier categories</span></caption>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Algorithm category</th>
-<th class="head">CAT</th>
-<th class="head">Category details</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>None</td>
-<td><code class="docutils literal"><span class="pre">0x00</span></code></td>
-<td>See <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_NONE" title="PSA_ALG_NONE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_NONE</span></code></a></td>
-</tr>
-<tr class="row-odd"><td>Hash</td>
-<td><code class="docutils literal"><span class="pre">0x02</span></code></td>
-<td>See <a class="reference internal" href="#hash-encoding"><span class="secref">Hash algorithm encoding</span></a></td>
-</tr>
-<tr class="row-even"><td>MAC</td>
-<td><code class="docutils literal"><span class="pre">0x03</span></code></td>
-<td>See <a class="reference internal" href="#mac-encoding"><span class="secref">MAC algorithm encoding</span></a></td>
-</tr>
-<tr class="row-odd"><td>Cipher</td>
-<td><code class="docutils literal"><span class="pre">0x04</span></code></td>
-<td>See <a class="reference internal" href="#cipher-encoding"><span class="secref">Cipher algorithm encoding</span></a></td>
-</tr>
-<tr class="row-even"><td>AEAD</td>
-<td><code class="docutils literal"><span class="pre">0x05</span></code></td>
-<td>See <a class="reference internal" href="#aead-encoding"><span class="secref">AEAD algorithm encoding</span></a></td>
-</tr>
-<tr class="row-odd"><td>Key derivation</td>
-<td><code class="docutils literal"><span class="pre">0x08</span></code></td>
-<td>See <a class="reference internal" href="#kdf-encoding"><span class="secref">Key derivation algorithm encoding</span></a></td>
-</tr>
-<tr class="row-even"><td>Asymmetric signature</td>
-<td><code class="docutils literal"><span class="pre">0x06</span></code></td>
-<td>See <a class="reference internal" href="#sign-encoding"><span class="secref">Asymmetric signature algorithm encoding</span></a></td>
-</tr>
-<tr class="row-odd"><td>Asymmetric encryption</td>
-<td><code class="docutils literal"><span class="pre">0x07</span></code></td>
-<td>See <a class="reference internal" href="#pke-encoding"><span class="secref">Asymmetric encryption algorithm encoding</span></a></td>
-</tr>
-<tr class="row-even"><td>Key agreement</td>
-<td><code class="docutils literal"><span class="pre">0x09</span></code></td>
-<td>See <a class="reference internal" href="#ka-encoding"><span class="secref">Key agreement algorithm encoding</span></a></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="section" id="hash-algorithm-encoding">
-<span id="hash-encoding"></span><h3>Hash algorithm encoding</h3>
-<p>The algorithm identifier for hash algorithms defined in this specification are encoded as shown in <span><a class="reference internal" href="#fig-hash-fields"><span class="numref">Figure 2</span></a></span>.</p>
-<div class="figure" id="fig-hash-fields">
-<img alt="../_images/hash_fields.svg" src="../_images/hash_fields.svg" /><p class="caption"><span class="caption-number">Figure 2 </span><span class="caption-text">Hash algorithm encoding</span></p>
-</div>
-<p>The defined values for HASH-TYPE are shown in <span><a class="reference internal" href="#table-hash-type"><span class="numref">Table 8</span></a></span>.</p>
-<table border="1" class="colwidths-auto docutils align-left" id="table-hash-type">
-<caption><span class="caption-number">Table 8 </span><span class="caption-text">Hash algorithm sub-type values</span></caption>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Hash algorithm</th>
-<th class="head">HASH-TYPE</th>
-<th class="head">Algorithm identifier</th>
-<th class="head">Algorithm value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>MD2</td>
-<td><code class="docutils literal"><span class="pre">0x01</span></code></td>
-<td><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_MD2" title="PSA_ALG_MD2"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_MD2</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x02000001</span></code></td>
-</tr>
-<tr class="row-odd"><td>MD4</td>
-<td><code class="docutils literal"><span class="pre">0x02</span></code></td>
-<td><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_MD4" title="PSA_ALG_MD4"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_MD4</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x02000002</span></code></td>
-</tr>
-<tr class="row-even"><td>MD5</td>
-<td><code class="docutils literal"><span class="pre">0x03</span></code></td>
-<td><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_MD5" title="PSA_ALG_MD5"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_MD5</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x02000003</span></code></td>
-</tr>
-<tr class="row-odd"><td>RIPEMD-160</td>
-<td><code class="docutils literal"><span class="pre">0x04</span></code></td>
-<td><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_RIPEMD160" title="PSA_ALG_RIPEMD160"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_RIPEMD160</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x02000004</span></code></td>
-</tr>
-<tr class="row-even"><td>SHA1</td>
-<td><code class="docutils literal"><span class="pre">0x05</span></code></td>
-<td><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_1" title="PSA_ALG_SHA_1"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA_1</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x02000005</span></code></td>
-</tr>
-<tr class="row-odd"><td>SHA-224</td>
-<td><code class="docutils literal"><span class="pre">0x08</span></code></td>
-<td><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_224" title="PSA_ALG_SHA_224"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA_224</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x02000008</span></code></td>
-</tr>
-<tr class="row-even"><td>SHA-256</td>
-<td><code class="docutils literal"><span class="pre">0x09</span></code></td>
-<td><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_256" title="PSA_ALG_SHA_256"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA_256</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x02000009</span></code></td>
-</tr>
-<tr class="row-odd"><td>SHA-384</td>
-<td><code class="docutils literal"><span class="pre">0x0A</span></code></td>
-<td><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_384" title="PSA_ALG_SHA_384"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA_384</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x0200000A</span></code></td>
-</tr>
-<tr class="row-even"><td>SHA-512</td>
-<td><code class="docutils literal"><span class="pre">0x0B</span></code></td>
-<td><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_512" title="PSA_ALG_SHA_512"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA_512</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x0200000B</span></code></td>
-</tr>
-<tr class="row-odd"><td>SHA-512/224</td>
-<td><code class="docutils literal"><span class="pre">0x0C</span></code></td>
-<td><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_512_224" title="PSA_ALG_SHA_512_224"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA_512_224</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x0200000C</span></code></td>
-</tr>
-<tr class="row-even"><td>SHA-512/256</td>
-<td><code class="docutils literal"><span class="pre">0x0D</span></code></td>
-<td><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_512_256" title="PSA_ALG_SHA_512_256"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA_512_256</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x0200000D</span></code></td>
-</tr>
-<tr class="row-odd"><td>SHA3-224</td>
-<td><code class="docutils literal"><span class="pre">0x10</span></code></td>
-<td><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA3_224" title="PSA_ALG_SHA3_224"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA3_224</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x02000010</span></code></td>
-</tr>
-<tr class="row-even"><td>SHA3-256</td>
-<td><code class="docutils literal"><span class="pre">0x11</span></code></td>
-<td><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA3_256" title="PSA_ALG_SHA3_256"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA3_256</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x02000011</span></code></td>
-</tr>
-<tr class="row-odd"><td>SHA3-384</td>
-<td><code class="docutils literal"><span class="pre">0x12</span></code></td>
-<td><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA3_384" title="PSA_ALG_SHA3_384"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA3_384</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x02000012</span></code></td>
-</tr>
-<tr class="row-even"><td>SHA3-512</td>
-<td><code class="docutils literal"><span class="pre">0x13</span></code></td>
-<td><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA3_512" title="PSA_ALG_SHA3_512"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA3_512</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x02000013</span></code></td>
-</tr>
-<tr class="row-odd"><td>SM3</td>
-<td><code class="docutils literal"><span class="pre">0x14</span></code></td>
-<td><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SM3" title="PSA_ALG_SM3"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SM3</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x02000014</span></code></td>
-</tr>
-<tr class="row-even"><td>SHAKE256-512</td>
-<td><code class="docutils literal"><span class="pre">0x15</span></code></td>
-<td><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHAKE256_512" title="PSA_ALG_SHAKE256_512"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHAKE256_512</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x02000015</span></code></td>
-</tr>
-<tr class="row-odd"><td><em>wildcard</em> <sup>a</sup></td>
-<td><code class="docutils literal"><span class="pre">0xFF</span></code></td>
-<td><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ANY_HASH" title="PSA_ALG_ANY_HASH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_ANY_HASH</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x020000FF</span></code></td>
-</tr>
-</tbody>
-</table>
-<ol class="loweralpha simple">
-<li>The wildcard hash <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ANY_HASH" title="PSA_ALG_ANY_HASH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_ANY_HASH</span></code></a> can be used to parameterize a signature algorithm which defines a key usage policy, allowing any hash algorithm to be specified in a signature operation using the key.</li>
-</ol>
-</div>
-<div class="section" id="mac-algorithm-encoding">
-<span id="mac-encoding"></span><h3>MAC algorithm encoding</h3>
-<p>The algorithm identifier for MAC algorithms defined in this specification are encoded as shown in <span><a class="reference internal" href="#fig-mac-fields"><span class="numref">Figure 3</span></a></span>.</p>
-<div class="figure" id="fig-mac-fields">
-<img alt="../_images/mac_fields.svg" src="../_images/mac_fields.svg" /><p class="caption"><span class="caption-number">Figure 3 </span><span class="caption-text">MAC algorithm encoding</span></p>
-</div>
-<p>The defined values for B and MAC-TYPE are shown in <span><a class="reference internal" href="#table-mac-type"><span class="numref">Table 9</span></a></span>.</p>
-<p>LEN = 0 specifies a default length output MAC, other values for LEN specify a truncated MAC.</p>
-<p>W is a flag to indicate a wildcard permitted-algorithm policy:</p>
-<ul class="simple">
-<li>W = 0 indicates a specific MAC algorithm and MAC length.</li>
-<li>W = 1 indicates a wildcard key usage policy, which permits the MAC algorithm with a MAC length of at least LEN to be specified in a MAC operation using the key. LEN must not be zero.</li>
-</ul>
-<p>H = HASH-TYPE (see <span><a class="reference internal" href="#table-hash-type"><span class="numref">Table 8</span></a></span>) for hash-based MAC algorithms, otherwise H = 0.</p>
-<table border="1" class="colwidths-auto docutils align-left" id="table-mac-type">
-<caption><span class="caption-number">Table 9 </span><span class="caption-text">MAC algorithm sub-type values</span></caption>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">MAC algorithm</th>
-<th class="head">B</th>
-<th class="head">MAC-TYPE</th>
-<th class="head">Algorithm identifier</th>
-<th class="head">Algorithm value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>HMAC</td>
-<td>0</td>
-<td><code class="docutils literal"><span class="pre">0x00</span></code></td>
-<td><a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_HMAC" title="PSA_ALG_HMAC"><code class="docutils literal"><span class="pre">PSA_ALG_HMAC</span></code></a><code class="docutils literal"><span class="pre">(</span></code><code class="docutils literal"><span class="pre">hash_alg</span></code><code class="docutils literal"><span class="pre">)</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x038000hh</span></code> <sup>a b</sup></td>
-</tr>
-<tr class="row-odd"><td>CBC-MAC <sup>c</sup></td>
-<td>1</td>
-<td><code class="docutils literal"><span class="pre">0x01</span></code></td>
-<td><a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_CBC_MAC" title="PSA_ALG_CBC_MAC"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_CBC_MAC</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x03c00100</span></code> <sup>a</sup></td>
-</tr>
-<tr class="row-even"><td>CMAC <sup>c</sup></td>
-<td>1</td>
-<td><code class="docutils literal"><span class="pre">0x02</span></code></td>
-<td><a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_CMAC" title="PSA_ALG_CMAC"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_CMAC</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x03c00200</span></code> <sup>a</sup></td>
-</tr>
-</tbody>
-</table>
-<ol class="loweralpha simple">
-<li>This is the default algorithm identifier, specifying a standard length tag. <a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_TRUNCATED_MAC" title="PSA_ALG_TRUNCATED_MAC"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_TRUNCATED_MAC()</span></code></a> generates identifiers with non-default LEN values. <a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_AT_LEAST_THIS_LENGTH_MAC" title="PSA_ALG_AT_LEAST_THIS_LENGTH_MAC"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_AT_LEAST_THIS_LENGTH_MAC()</span></code></a> generates permitted-algorithm policies with W = 1.</li>
-<li><code class="docutils literal"><span class="pre">hh</span></code> is the HASH-TYPE for the hash algorithm, <code class="docutils literal"><span class="pre">hash_alg</span></code>, used to construct the MAC algorithm.</li>
-<li>This is a MAC constructed using an underlying block cipher. The block cipher is determined by the key type that is provided to the MAC operation.</li>
-</ol>
-</div>
-<div class="section" id="cipher-algorithm-encoding">
-<span id="cipher-encoding"></span><h3>Cipher algorithm encoding</h3>
-<p>The algorithm identifier for CIPHER algorithms defined in this specification are encoded as shown in <span><a class="reference internal" href="#fig-cipher-fields"><span class="numref">Figure 4</span></a></span>.</p>
-<div class="figure" id="fig-cipher-fields">
-<img alt="../_images/cipher_fields.svg" src="../_images/cipher_fields.svg" /><p class="caption"><span class="caption-number">Figure 4 </span><span class="caption-text">CIPHER algorithm encoding</span></p>
-</div>
-<p>The defined values for S, B, and CIPHER-TYPE are shown in <span><a class="reference internal" href="#table-cipher-type"><span class="numref">Table 10</span></a></span>.</p>
-<table border="1" class="colwidths-auto docutils align-left" id="table-cipher-type">
-<caption><span class="caption-number">Table 10 </span><span class="caption-text">Cipher algorithm sub-type values</span></caption>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Cipher algorithm</th>
-<th class="head">S</th>
-<th class="head">B</th>
-<th class="head">CIPHER-TYPE</th>
-<th class="head">Algorithm identifier</th>
-<th class="head">Algorithm value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td><em>Stream cipher</em> <sup>a</sup></td>
-<td>1</td>
-<td>0</td>
-<td><code class="docutils literal"><span class="pre">0x01</span></code></td>
-<td><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_STREAM_CIPHER" title="PSA_ALG_STREAM_CIPHER"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_STREAM_CIPHER</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x04800100</span></code></td>
-</tr>
-<tr class="row-odd"><td>CTR mode <sup>b</sup></td>
-<td>1</td>
-<td>1</td>
-<td><code class="docutils literal"><span class="pre">0x10</span></code></td>
-<td><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_CTR" title="PSA_ALG_CTR"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_CTR</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x04C01000</span></code></td>
-</tr>
-<tr class="row-even"><td>CFB mode <sup>b</sup></td>
-<td>1</td>
-<td>1</td>
-<td><code class="docutils literal"><span class="pre">0x11</span></code></td>
-<td><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_CFB" title="PSA_ALG_CFB"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_CFB</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x04C01100</span></code></td>
-</tr>
-<tr class="row-odd"><td>OFB mode <sup>b</sup></td>
-<td>1</td>
-<td>1</td>
-<td><code class="docutils literal"><span class="pre">0x12</span></code></td>
-<td><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_OFB" title="PSA_ALG_OFB"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_OFB</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x04C01200</span></code></td>
-</tr>
-<tr class="row-even"><td>XTS mode <sup>b</sup></td>
-<td>0</td>
-<td>1</td>
-<td><code class="docutils literal"><span class="pre">0xFF</span></code></td>
-<td><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_XTS" title="PSA_ALG_XTS"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_XTS</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x0440FF00</span></code></td>
-</tr>
-<tr class="row-odd"><td>CBC mode without padding <sup>b</sup></td>
-<td>0</td>
-<td>1</td>
-<td><code class="docutils literal"><span class="pre">0x40</span></code></td>
-<td><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_CBC_NO_PADDING" title="PSA_ALG_CBC_NO_PADDING"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_CBC_NO_PADDING</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x04404000</span></code></td>
-</tr>
-<tr class="row-even"><td>CBC mode with PKCS#7 padding <sup>b</sup></td>
-<td>0</td>
-<td>1</td>
-<td><code class="docutils literal"><span class="pre">0x41</span></code></td>
-<td><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_CBC_PKCS7" title="PSA_ALG_CBC_PKCS7"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_CBC_PKCS7</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x04404100</span></code></td>
-</tr>
-<tr class="row-odd"><td>ECB mode without padding <sup>b</sup></td>
-<td>0</td>
-<td>1</td>
-<td><code class="docutils literal"><span class="pre">0x44</span></code></td>
-<td><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_ECB_NO_PADDING" title="PSA_ALG_ECB_NO_PADDING"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_ECB_NO_PADDING</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x04404400</span></code></td>
-</tr>
-</tbody>
-</table>
-<ol class="loweralpha simple">
-<li>The stream cipher algorithm identifier <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_STREAM_CIPHER" title="PSA_ALG_STREAM_CIPHER"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_STREAM_CIPHER</span></code></a> is used with specific stream cipher key types, such as <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_CHACHA20" title="PSA_KEY_TYPE_CHACHA20"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_CHACHA20</span></code></a>.</li>
-<li>This is a cipher mode of an underlying block cipher. The block cipher is determined by the key type that is provided to the cipher operation.</li>
-</ol>
-</div>
-<div class="section" id="aead-algorithm-encoding">
-<span id="aead-encoding"></span><h3>AEAD algorithm encoding</h3>
-<p>The algorithm identifier for AEAD algorithms defined in this specification are encoded as shown in <span><a class="reference internal" href="#fig-aead-fields"><span class="numref">Figure 5</span></a></span>.</p>
-<div class="figure" id="fig-aead-fields">
-<img alt="../_images/aead_fields.svg" src="../_images/aead_fields.svg" /><p class="caption"><span class="caption-number">Figure 5 </span><span class="caption-text">AEAD algorithm encoding</span></p>
-</div>
-<p>The defined values for B and AEAD-TYPE are shown in <span><a class="reference internal" href="#table-aead-type"><span class="numref">Table 11</span></a></span>.</p>
-<p>LEN = 1..31 specifies the output tag length.</p>
-<p>W is a flag to indicate a wildcard permitted-algorithm policy:</p>
-<ul class="simple">
-<li>W = 0 indicates a specific AEAD algorithm and tag length.</li>
-<li>W = 1 indicates a wildcard key usage policy, which permits the AEAD algorithm with a tag length of at least LEN to be specified in an AEAD operation using the key.</li>
-</ul>
-<table border="1" class="colwidths-auto docutils align-left" id="table-aead-type">
-<caption><span class="caption-number">Table 11 </span><span class="caption-text">AEAD algorithm sub-type values</span></caption>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">AEAD algorithm</th>
-<th class="head">B</th>
-<th class="head">AEAD-TYPE</th>
-<th class="head">Algorithm identifier</th>
-<th class="head">Algorithm value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>CCM <sup>a</sup></td>
-<td>1</td>
-<td><code class="docutils literal"><span class="pre">0x01</span></code></td>
-<td><a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_CCM" title="PSA_ALG_CCM"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_CCM</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x05500100</span></code> <sup>b</sup></td>
-</tr>
-<tr class="row-odd"><td>GCM <sup>a</sup></td>
-<td>1</td>
-<td><code class="docutils literal"><span class="pre">0x02</span></code></td>
-<td><a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_GCM" title="PSA_ALG_GCM"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_GCM</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x05500200</span></code> <sup>b</sup></td>
-</tr>
-<tr class="row-even"><td>ChaCha20-poly1305</td>
-<td>0</td>
-<td><code class="docutils literal"><span class="pre">0x05</span></code></td>
-<td><a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_CHACHA20_POLY1305" title="PSA_ALG_CHACHA20_POLY1305"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_CHACHA20_POLY1305</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x05100500</span></code> <sup>b</sup></td>
-</tr>
-</tbody>
-</table>
-<ol class="loweralpha simple">
-<li>This is an AEAD mode of an underlying block cipher. The block cipher is determined by the key type that is provided to the AEAD operation.</li>
-<li>This is the default algorithm identifier, specifying the default tag length for the algorithm. <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_AEAD_WITH_SHORTENED_TAG" title="PSA_ALG_AEAD_WITH_SHORTENED_TAG"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_AEAD_WITH_SHORTENED_TAG()</span></code></a> generates identifiers with alternative LEN values. <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG" title="PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG()</span></code></a> generates wildcard permitted-algorithm policies with W = 1.</li>
-</ol>
-</div>
-<div class="section" id="key-derivation-algorithm-encoding">
-<span id="kdf-encoding"></span><h3>Key derivation algorithm encoding</h3>
-<p>The algorithm identifier for key derivation algorithms defined in this specification are encoded as shown in <span><a class="reference internal" href="#fig-kdf-fields"><span class="numref">Figure 6</span></a></span>.</p>
-<div class="figure" id="fig-kdf-fields">
-<img alt="../_images/kdf_fields.svg" src="../_images/kdf_fields.svg" /><p class="caption"><span class="caption-number">Figure 6 </span><span class="caption-text">Key derivation algorithm encoding</span></p>
-</div>
-<p>The defined values for S and KDF-TYPE are shown in <span><a class="reference internal" href="#table-kdf-type"><span class="numref">Table 12</span></a></span>.</p>
-<p>The permitted values of HASH-TYPE (see <span><a class="reference internal" href="#table-hash-type"><span class="numref">Table 8</span></a></span>) depend on the specific KDF algorithm.</p>
-<table border="1" class="colwidths-auto docutils align-left" id="table-kdf-type">
-<caption><span class="caption-number">Table 12 </span><span class="caption-text">Key derivation algorithm sub-type values</span></caption>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Key derivation algorithm</th>
-<th class="head">S</th>
-<th class="head">KDF-TYPE</th>
-<th class="head">Algorithm identifier</th>
-<th class="head">Algorithm value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>HKDF</td>
-<td>0</td>
-<td><code class="docutils literal"><span class="pre">0x01</span></code></td>
-<td><a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_HKDF" title="PSA_ALG_HKDF"><code class="docutils literal"><span class="pre">PSA_ALG_HKDF</span></code></a><code class="docutils literal"><span class="pre">(</span></code><code class="docutils literal"><span class="pre">hash_alg</span></code><code class="docutils literal"><span class="pre">)</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x080001hh</span></code> <sup>a</sup></td>
-</tr>
-<tr class="row-odd"><td>TLS-1.2 PRF</td>
-<td>0</td>
-<td><code class="docutils literal"><span class="pre">0x02</span></code></td>
-<td><a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_TLS12_PRF" title="PSA_ALG_TLS12_PRF"><code class="docutils literal"><span class="pre">PSA_ALG_TLS12_PRF</span></code></a><code class="docutils literal"><span class="pre">(</span></code><code class="docutils literal"><span class="pre">hash_alg</span></code><code class="docutils literal"><span class="pre">)</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x080002hh</span></code> <sup>a</sup></td>
-</tr>
-<tr class="row-even"><td>TLS-1.2 PSK-to-MasterSecret</td>
-<td>0</td>
-<td><code class="docutils literal"><span class="pre">0x03</span></code></td>
-<td><a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_TLS12_PSK_TO_MS" title="PSA_ALG_TLS12_PSK_TO_MS"><code class="docutils literal"><span class="pre">PSA_ALG_TLS12_PSK_TO_MS</span></code></a><code class="docutils literal"><span class="pre">(</span></code><code class="docutils literal"><span class="pre">hash_alg</span></code><code class="docutils literal"><span class="pre">)</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x080003hh</span></code> <sup>a</sup></td>
-</tr>
-<tr class="row-odd"><td>PBKDF2-HMAC</td>
-<td>1</td>
-<td><code class="docutils literal"><span class="pre">0x01</span></code></td>
-<td><a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_PBKDF2_HMAC" title="PSA_ALG_PBKDF2_HMAC"><code class="docutils literal"><span class="pre">PSA_ALG_PBKDF2_HMAC</span></code></a><code class="docutils literal"><span class="pre">(</span></code><code class="docutils literal"><span class="pre">hash_alg</span></code><code class="docutils literal"><span class="pre">)</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x088001hh</span></code> <sup>a</sup></td>
-</tr>
-<tr class="row-even"><td>PBKDF2-AES-CMAC-PRF-128</td>
-<td>1</td>
-<td><code class="docutils literal"><span class="pre">0x02</span></code></td>
-<td><a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_PBKDF2_AES_CMAC_PRF_128" title="PSA_ALG_PBKDF2_AES_CMAC_PRF_128"><code class="docutils literal"><span class="pre">PSA_ALG_PBKDF2_AES_CMAC_PRF_128</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x08800200</span></code></td>
-</tr>
-</tbody>
-</table>
-<ol class="loweralpha simple">
-<li><code class="docutils literal"><span class="pre">hh</span></code> is the HASH-TYPE for the hash algorithm, <code class="docutils literal"><span class="pre">hash_alg</span></code>, used to construct the key derivation algorithm.</li>
-</ol>
-</div>
-<div class="section" id="asymmetric-signature-algorithm-encoding">
-<span id="sign-encoding"></span><h3>Asymmetric signature algorithm encoding</h3>
-<p>The algorithm identifier for asymmetric signature algorithms defined in this specification are encoded as shown in <span><a class="reference internal" href="#fig-sign-fields"><span class="numref">Figure 7</span></a></span>.</p>
-<div class="figure" id="fig-sign-fields">
-<img alt="../_images/sign_fields.svg" src="../_images/sign_fields.svg" /><p class="caption"><span class="caption-number">Figure 7 </span><span class="caption-text">Asymmetric signature algorithm encoding</span></p>
-</div>
-<p>The defined values for SIGN-TYPE are shown in <span><a class="reference internal" href="#table-sign-type"><span class="numref">Table 13</span></a></span>.</p>
-<p>H = HASH-TYPE (see <span><a class="reference internal" href="#table-hash-type"><span class="numref">Table 8</span></a></span>) for message signature algorithms that are parameterized by a hash algorithm, otherwise H = 0.</p>
-<table border="1" class="colwidths-auto docutils align-left" id="table-sign-type">
-<caption><span class="caption-number">Table 13 </span><span class="caption-text">Asymmetric signature algorithm sub-type values</span></caption>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Signature algorithm</th>
-<th class="head">SIGN-TYPE</th>
-<th class="head">Algorithm identifier</th>
-<th class="head">Algorithm value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>RSA PKCS#1 v1.5</td>
-<td><code class="docutils literal"><span class="pre">0x02</span></code></td>
-<td><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PKCS1V15_SIGN" title="PSA_ALG_RSA_PKCS1V15_SIGN"><code class="docutils literal"><span class="pre">PSA_ALG_RSA_PKCS1V15_SIGN</span></code></a><code class="docutils literal"><span class="pre">(</span></code><code class="docutils literal"><span class="pre">hash_alg</span></code><code class="docutils literal"><span class="pre">)</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x060002hh</span></code> <sup>a</sup></td>
-</tr>
-<tr class="row-odd"><td>RSA PKCS#1 v1.5 no hash <sup>b</sup></td>
-<td><code class="docutils literal"><span class="pre">0x02</span></code></td>
-<td><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PKCS1V15_SIGN_RAW" title="PSA_ALG_RSA_PKCS1V15_SIGN_RAW"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_RSA_PKCS1V15_SIGN_RAW</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x06000200</span></code></td>
-</tr>
-<tr class="row-even"><td>RSA PSS</td>
-<td><code class="docutils literal"><span class="pre">0x03</span></code></td>
-<td><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PSS" title="PSA_ALG_RSA_PSS"><code class="docutils literal"><span class="pre">PSA_ALG_RSA_PSS</span></code></a><code class="docutils literal"><span class="pre">(</span></code><code class="docutils literal"><span class="pre">hash_alg</span></code><code class="docutils literal"><span class="pre">)</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x060003hh</span></code> <sup>a</sup></td>
-</tr>
-<tr class="row-odd"><td>RSA PSS any salt length</td>
-<td><code class="docutils literal"><span class="pre">0x13</span></code></td>
-<td><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PSS_ANY_SALT" title="PSA_ALG_RSA_PSS_ANY_SALT"><code class="docutils literal"><span class="pre">PSA_ALG_RSA_PSS_ANY_SALT</span></code></a><code class="docutils literal"><span class="pre">(</span></code><code class="docutils literal"><span class="pre">hash_alg</span></code><code class="docutils literal"><span class="pre">)</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x060013hh</span></code> <sup>a</sup></td>
-</tr>
-<tr class="row-even"><td>Randomized ECDSA</td>
-<td><code class="docutils literal"><span class="pre">0x06</span></code></td>
-<td><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ECDSA" title="PSA_ALG_ECDSA"><code class="docutils literal"><span class="pre">PSA_ALG_ECDSA</span></code></a><code class="docutils literal"><span class="pre">(</span></code><code class="docutils literal"><span class="pre">hash_alg</span></code><code class="docutils literal"><span class="pre">)</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x060006hh</span></code> <sup>a</sup></td>
-</tr>
-<tr class="row-odd"><td>Randomized ECDSA no hash <sup>b</sup></td>
-<td><code class="docutils literal"><span class="pre">0x06</span></code></td>
-<td><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ECDSA_ANY" title="PSA_ALG_ECDSA_ANY"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_ECDSA_ANY</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x06000600</span></code></td>
-</tr>
-<tr class="row-even"><td>Deterministic ECDSA</td>
-<td><code class="docutils literal"><span class="pre">0x07</span></code></td>
-<td><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_DETERMINISTIC_ECDSA" title="PSA_ALG_DETERMINISTIC_ECDSA"><code class="docutils literal"><span class="pre">PSA_ALG_DETERMINISTIC_ECDSA</span></code></a><code class="docutils literal"><span class="pre">(</span></code><code class="docutils literal"><span class="pre">hash_alg</span></code><code class="docutils literal"><span class="pre">)</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x060007hh</span></code> <sup>a</sup></td>
-</tr>
-<tr class="row-odd"><td>PureEdDSA</td>
-<td><code class="docutils literal"><span class="pre">0x08</span></code></td>
-<td><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_PURE_EDDSA" title="PSA_ALG_PURE_EDDSA"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_PURE_EDDSA</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x06000800</span></code></td>
-</tr>
-<tr class="row-even"><td>HashEdDSA</td>
-<td><code class="docutils literal"><span class="pre">0x09</span></code></td>
-<td><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ED25519PH" title="PSA_ALG_ED25519PH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_ED25519PH</span></code></a> and <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ED448PH" title="PSA_ALG_ED448PH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_ED448PH</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x060009hh</span></code> <sup>c</sup></td>
-</tr>
-</tbody>
-</table>
-<ol class="loweralpha simple">
-<li><code class="docutils literal"><span class="pre">hh</span></code> is the HASH-TYPE for the hash algorithm, <code class="docutils literal"><span class="pre">hash_alg</span></code>, used to construct the signature algorithm.</li>
-<li>Asymmetric signature algorithms without hashing can only be used with <a class="reference internal" href="../api/ops/sign.html#c.psa_sign_hash" title="psa_sign_hash"><code class="xref any c c-func docutils literal"><span class="pre">psa_sign_hash()</span></code></a> and <a class="reference internal" href="../api/ops/sign.html#c.psa_verify_hash" title="psa_verify_hash"><code class="xref any c c-func docutils literal"><span class="pre">psa_verify_hash()</span></code></a>.</li>
-<li>The HASH-TYPE for HashEdDSA is determined by the curve. SHA-512 is used for Ed25519ph, and the first 64 bytes of output from SHAKE256 is used for Ed448ph.</li>
-</ol>
-</div>
-<div class="section" id="asymmetric-encryption-algorithm-encoding">
-<span id="pke-encoding"></span><h3>Asymmetric encryption algorithm encoding</h3>
-<p>The algorithm identifier for asymmetric encryption algorithms defined in this specification are encoded as shown in <span><a class="reference internal" href="#fig-pke-fields"><span class="numref">Figure 8</span></a></span>.</p>
-<div class="figure" id="fig-pke-fields">
-<img alt="../_images/pke_fields.svg" src="../_images/pke_fields.svg" /><p class="caption"><span class="caption-number">Figure 8 </span><span class="caption-text">Asymmetric encryption algorithm encoding</span></p>
-</div>
-<p>The defined values for ENCRYPT-TYPE are shown in <span><a class="reference internal" href="#table-pke-type"><span class="numref">Table 14</span></a></span>.</p>
-<p>H = HASH-TYPE (see <span><a class="reference internal" href="#table-hash-type"><span class="numref">Table 8</span></a></span>) for asymmetric encryption algorithms that are parameterized by a hash algorithm, otherwise H = 0.</p>
-<table border="1" class="colwidths-auto docutils align-left" id="table-pke-type">
-<caption><span class="caption-number">Table 14 </span><span class="caption-text">Asymmetric encryption algorithm sub-type values</span></caption>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Asymmetric encryption algorithm</th>
-<th class="head">ENCRYPT-TYPE</th>
-<th class="head">Algorithm identifier</th>
-<th class="head">Algorithm value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>RSA PKCS#1 v1.5</td>
-<td><code class="docutils literal"><span class="pre">0x02</span></code></td>
-<td><a class="reference internal" href="../api/ops/pke.html#c.PSA_ALG_RSA_PKCS1V15_CRYPT" title="PSA_ALG_RSA_PKCS1V15_CRYPT"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_RSA_PKCS1V15_CRYPT</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x07000200</span></code></td>
-</tr>
-<tr class="row-odd"><td>RSA OAEP</td>
-<td><code class="docutils literal"><span class="pre">0x03</span></code></td>
-<td><a class="reference internal" href="../api/ops/pke.html#c.PSA_ALG_RSA_OAEP" title="PSA_ALG_RSA_OAEP"><code class="docutils literal"><span class="pre">PSA_ALG_RSA_OAEP</span></code></a><code class="docutils literal"><span class="pre">(</span></code><code class="docutils literal"><span class="pre">hash_alg</span></code><code class="docutils literal"><span class="pre">)</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x070003hh</span></code> <sup>a</sup></td>
-</tr>
-</tbody>
-</table>
-<ol class="loweralpha simple">
-<li><code class="docutils literal"><span class="pre">hh</span></code> is the HASH-TYPE for the hash algorithm, <code class="docutils literal"><span class="pre">hash_alg</span></code>, used to construct the encryption algorithm.</li>
-</ol>
-</div>
-<div class="section" id="key-agreement-algorithm-encoding">
-<span id="ka-encoding"></span><h3>Key agreement algorithm encoding</h3>
-<p>A key agreement algorithm identifier can either be for the raw key agreement algorithm, or for a combined key agreement with key derivation algorithm. The former can only be used with <a class="reference internal" href="../api/ops/ka.html#c.psa_raw_key_agreement" title="psa_raw_key_agreement"><code class="xref any c c-func docutils literal"><span class="pre">psa_raw_key_agreement()</span></code></a>, while the latter are used with <a class="reference internal" href="../api/ops/ka.html#c.psa_key_derivation_key_agreement" title="psa_key_derivation_key_agreement"><code class="xref any c c-func docutils literal"><span class="pre">psa_key_derivation_key_agreement()</span></code></a> and the shared secret is not exposed to the client.</p>
-<p>The algorithm identifier for raw key agreement algorithms defined in this specification are encoded as shown in <span><a class="reference internal" href="#fig-ka-raw-fields"><span class="numref">Figure 9</span></a></span>.</p>
-<div class="figure" id="fig-ka-raw-fields">
-<img alt="../_images/ka_raw_fields.svg" src="../_images/ka_raw_fields.svg" /><p class="caption"><span class="caption-number">Figure 9 </span><span class="caption-text">Raw key agreement algorithm encoding</span></p>
-</div>
-<p>The defined values for KA-TYPE are shown in <span><a class="reference internal" href="#table-ka-type"><span class="numref">Table 15</span></a></span>.</p>
-<table border="1" class="colwidths-auto docutils align-left" id="table-ka-type">
-<caption><span class="caption-number">Table 15 </span><span class="caption-text">Key agreement algorithm sub-type values</span></caption>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Key agreement algorithm</th>
-<th class="head">KA-TYPE</th>
-<th class="head">Algorithm identifier</th>
-<th class="head">Algorithm value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>FFDH</td>
-<td><code class="docutils literal"><span class="pre">0x01</span></code></td>
-<td><a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_FFDH" title="PSA_ALG_FFDH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_FFDH</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x09010000</span></code></td>
-</tr>
-<tr class="row-odd"><td>ECDH</td>
-<td><code class="docutils literal"><span class="pre">0x02</span></code></td>
-<td><a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_ECDH" title="PSA_ALG_ECDH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_ECDH</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x09020000</span></code></td>
-</tr>
-</tbody>
-</table>
-<p>A combined key agreement is constructed by a bitwise OR of the raw key agreement algorithm identifier and the key derivation algorithm identifier. This operation is provided by the <a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_KEY_AGREEMENT" title="PSA_ALG_KEY_AGREEMENT"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_KEY_AGREEMENT()</span></code></a> macro.</p>
-<div class="figure" id="id7">
-<img alt="../_images/ka_combined_fields.svg" src="../_images/ka_combined_fields.svg" /><p class="caption"><span class="caption-number">Figure 10 </span><span class="caption-text">Combined key agreement algorithm encoding</span></p>
-</div>
-<p>The underlying raw key agreement algorithm can be extracted from the KA-TYPE field, and the key derivation algorithm from the KDF-TYPE and HASH-TYPE fields.</p>
-</div>
-</div>
-<div class="section" id="key-type-encoding">
-<span id="id1"></span><h2>Key type encoding</h2>
-<p>Key types are 16-bit integer values of the type <a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t"><code class="xref any c c-type docutils literal"><span class="pre">psa_key_type_t</span></code></a>. Key type values have the structure shown in <span><a class="reference internal" href="#fig-key-type-fields"><span class="numref">Figure 11</span></a></span>.</p>
-<div class="figure" id="fig-key-type-fields">
-<img alt="../_images/key_type_fields.svg" src="../_images/key_type_fields.svg" /><p class="caption"><span class="caption-number">Figure 11 </span><span class="caption-text">Encoding of <a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t"><code class="xref any c c-type docutils literal"><span class="pre">psa_key_type_t</span></code></a></span></p>
-</div>
-<p><span><a class="reference internal" href="#table-key-type-fields"><span class="numref">Table 16</span></a></span> describes the meaning of the bit-fields — some of bit-fields are used in different ways by different key type categories.</p>
-<table border="1" class="colwidths-given longtable docutils align-right" id="table-key-type-fields">
-<caption><span class="caption-number">Table 16 </span><span class="caption-text">Bit fields in a key type</span></caption>
-<colgroup>
-<col width="24%" />
-<col width="10%" />
-<col width="67%" />
-</colgroup>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Field</th>
-<th class="head">Bits</th>
-<th class="head">Description</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>V</td>
-<td>[15]</td>
-<td><p class="first">Flag to indicate an implementation-defined key type, when V=1.</p>
-<p class="last">Key types defined by this specification always have V=0.</p>
-</td>
-</tr>
-<tr class="row-odd"><td>A</td>
-<td>[14]</td>
-<td>Flag to indicate an asymmetric key type, when A=1.</td>
-</tr>
-<tr class="row-even"><td>CAT</td>
-<td>[13:12]</td>
-<td>Key type category. See <a class="reference internal" href="#key-type-categories"><span class="secref">Key type categories</span></a>.</td>
-</tr>
-<tr class="row-odd"><td><em>category-specific type</em></td>
-<td>[11:1]</td>
-<td>The meaning of this field is specific to each key category.</td>
-</tr>
-<tr class="row-even"><td>P</td>
-<td>[0]</td>
-<td>Parity bit. Valid key type values have even parity.</td>
-</tr>
-</tbody>
-</table>
-<div class="section" id="key-type-categories">
-<span id="id2"></span><h3>Key type categories</h3>
-<p>The A and CAT fields in a key type take the values shown in <span><a class="reference internal" href="#table-key-type-category"><span class="numref">Table 17</span></a></span>.</p>
-<table border="1" class="colwidths-auto docutils align-left" id="table-key-type-category">
-<caption><span class="caption-number">Table 17 </span><span class="caption-text">Key type categories</span></caption>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Key type category</th>
-<th class="head">A</th>
-<th class="head">CAT</th>
-<th class="head">Category details</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>None</td>
-<td>0</td>
-<td>0</td>
-<td>See <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_NONE" title="PSA_KEY_TYPE_NONE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_NONE</span></code></a></td>
-</tr>
-<tr class="row-odd"><td>Raw data</td>
-<td>0</td>
-<td>1</td>
-<td>See <a class="reference internal" href="#raw-key-encoding"><span class="secref">Raw key encoding</span></a></td>
-</tr>
-<tr class="row-even"><td>Symmetric key</td>
-<td>0</td>
-<td>2</td>
-<td>See <a class="reference internal" href="#symmetric-key-encoding"><span class="secref">Symmetric key encoding</span></a></td>
-</tr>
-<tr class="row-odd"><td>Asymmetric public key</td>
-<td>1</td>
-<td>0</td>
-<td>See <a class="reference internal" href="#asymmetric-key-encoding"><span class="secref">Asymmetric key encoding</span></a></td>
-</tr>
-<tr class="row-even"><td>Asymmetric key pair</td>
-<td>1</td>
-<td>3</td>
-<td>See <a class="reference internal" href="#asymmetric-key-encoding"><span class="secref">Asymmetric key encoding</span></a></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="section" id="raw-key-encoding">
-<span id="id3"></span><h3>Raw key encoding</h3>
-<p>The key type for raw keys defined in this specification are encoded as shown in <span><a class="reference internal" href="#fig-raw-key-fields"><span class="numref">Figure 12</span></a></span>.</p>
-<div class="figure" id="fig-raw-key-fields">
-<img alt="../_images/raw_key_fields.svg" src="../_images/raw_key_fields.svg" /><p class="caption"><span class="caption-number">Figure 12 </span><span class="caption-text">Raw key encoding</span></p>
-</div>
-<p>The defined values for RAW-TYPE, SUB-TYPE, and P are shown in <span><a class="reference internal" href="#table-raw-type"><span class="numref">Table 18</span></a></span>.</p>
-<table border="1" class="colwidths-auto docutils align-left" id="table-raw-type">
-<caption><span class="caption-number">Table 18 </span><span class="caption-text">Raw key sub-type values</span></caption>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Raw key type</th>
-<th class="head">RAW-TYPE</th>
-<th class="head">SUB-TYPE</th>
-<th class="head">P</th>
-<th class="head">Key type</th>
-<th class="head">Key type value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>Raw data</td>
-<td>0</td>
-<td>0</td>
-<td>1</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_RAW_DATA" title="PSA_KEY_TYPE_RAW_DATA"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_RAW_DATA</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x1001</span></code></td>
-</tr>
-<tr class="row-odd"><td>HMAC</td>
-<td>1</td>
-<td>0</td>
-<td>0</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_HMAC" title="PSA_KEY_TYPE_HMAC"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_HMAC</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x1100</span></code></td>
-</tr>
-<tr class="row-even"><td>Derivation secret</td>
-<td>2</td>
-<td>0</td>
-<td>0</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_DERIVE" title="PSA_KEY_TYPE_DERIVE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_DERIVE</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x1200</span></code></td>
-</tr>
-<tr class="row-odd"><td>Password</td>
-<td>2</td>
-<td>1</td>
-<td>1</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_PASSWORD" title="PSA_KEY_TYPE_PASSWORD"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_PASSWORD</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x1203</span></code></td>
-</tr>
-<tr class="row-even"><td>Password hash</td>
-<td>2</td>
-<td>2</td>
-<td>1</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_PASSWORD_HASH" title="PSA_KEY_TYPE_PASSWORD_HASH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_PASSWORD_HASH</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x1205</span></code></td>
-</tr>
-<tr class="row-odd"><td>Derivation pepper</td>
-<td>2</td>
-<td>3</td>
-<td>0</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_PEPPER" title="PSA_KEY_TYPE_PEPPER"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_PEPPER</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x1206</span></code></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="section" id="symmetric-key-encoding">
-<span id="id4"></span><h3>Symmetric key encoding</h3>
-<p>The key type for symmetric keys defined in this specification are encoded as shown in <span><a class="reference internal" href="#fig-symmetric-key-fields"><span class="numref">Figure 13</span></a></span>.</p>
-<div class="figure" id="fig-symmetric-key-fields">
-<img alt="../_images/symmetric_key_fields.svg" src="../_images/symmetric_key_fields.svg" /><p class="caption"><span class="caption-number">Figure 13 </span><span class="caption-text">Symmetric key encoding</span></p>
-</div>
-<p>For block-based cipher keys, the block size for the cipher algorithm is 2<sup>BLK</sup>.</p>
-<p>The defined values for BLK, SYM-TYPE and P are shown in <span><a class="reference internal" href="#table-symmetric-type"><span class="numref">Table 19</span></a></span>.</p>
-<table border="1" class="colwidths-auto docutils align-left" id="table-symmetric-type">
-<caption><span class="caption-number">Table 19 </span><span class="caption-text">Symmetric key sub-type values</span></caption>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Symmetric key type</th>
-<th class="head">BLK</th>
-<th class="head">SYM-TYPE</th>
-<th class="head">P</th>
-<th class="head">Key type</th>
-<th class="head">Key type value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>ARC4</td>
-<td>0</td>
-<td>1</td>
-<td>0</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_ARC4" title="PSA_KEY_TYPE_ARC4"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_ARC4</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x2002</span></code></td>
-</tr>
-<tr class="row-odd"><td>ChaCha20</td>
-<td>0</td>
-<td>2</td>
-<td>0</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_CHACHA20" title="PSA_KEY_TYPE_CHACHA20"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_CHACHA20</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x2004</span></code></td>
-</tr>
-<tr class="row-even"><td>DES</td>
-<td>3</td>
-<td>0</td>
-<td>1</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_DES" title="PSA_KEY_TYPE_DES"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_DES</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x2301</span></code></td>
-</tr>
-<tr class="row-odd"><td>AES</td>
-<td>4</td>
-<td>0</td>
-<td>0</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_AES" title="PSA_KEY_TYPE_AES"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_AES</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x2400</span></code></td>
-</tr>
-<tr class="row-even"><td>CAMELLIA</td>
-<td>4</td>
-<td>1</td>
-<td>1</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_CAMELLIA" title="PSA_KEY_TYPE_CAMELLIA"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_CAMELLIA</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x2403</span></code></td>
-</tr>
-<tr class="row-odd"><td>SM4</td>
-<td>4</td>
-<td>2</td>
-<td>1</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_SM4" title="PSA_KEY_TYPE_SM4"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_SM4</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x2405</span></code></td>
-</tr>
-<tr class="row-even"><td>ARIA</td>
-<td>4</td>
-<td>3</td>
-<td>0</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_ARIA" title="PSA_KEY_TYPE_ARIA"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_ARIA</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x2406</span></code></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="section" id="asymmetric-key-encoding">
-<span id="id5"></span><h3>Asymmetric key encoding</h3>
-<p>The key type for asymmetric keys defined in this specification are encoded as shown in <span><a class="reference internal" href="#fig-asymmetric-key-fields"><span class="numref">Figure 14</span></a></span>.</p>
-<div class="figure" id="fig-asymmetric-key-fields">
-<img alt="../_images/asymmetric_key_fields.svg" src="../_images/asymmetric_key_fields.svg" /><p class="caption"><span class="caption-number">Figure 14 </span><span class="caption-text">Asymmetric key encoding</span></p>
-</div>
-<p>PAIR is either 0 for a public key, or 3 for a key pair.</p>
-<p>The defined values for ASYM-TYPE are shown in <span><a class="reference internal" href="#table-asymmetric-type"><span class="numref">Table 20</span></a></span>.</p>
-<table border="1" class="colwidths-auto docutils align-left" id="table-asymmetric-type">
-<caption><span class="caption-number">Table 20 </span><span class="caption-text">Asymmetric key sub-type values</span></caption>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Asymmetric key type</th>
-<th class="head">ASYM-TYPE</th>
-<th class="head">Details</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>RSA</td>
-<td>0</td>
-<td>See <a class="reference internal" href="#rsa-key-encoding"><span class="secref">RSA key encoding</span></a></td>
-</tr>
-<tr class="row-odd"><td>Elliptic Curve</td>
-<td>1</td>
-<td>See <a class="reference internal" href="#ecc-key-encoding"><span class="secref">Elliptic Curve key encoding</span></a></td>
-</tr>
-<tr class="row-even"><td>Diffie-Hellman</td>
-<td>2</td>
-<td>See <a class="reference internal" href="#dh-key-encoding"><span class="secref">Diffie Hellman key encoding</span></a></td>
-</tr>
-</tbody>
-</table>
-<div class="section" id="rsa-key-encoding">
-<span id="id6"></span><h4>RSA key encoding</h4>
-<p>The key type for RSA keys defined in this specification are encoded as shown in <span><a class="reference internal" href="#fig-rsa-key-fields"><span class="numref">Figure 15</span></a></span>.</p>
-<div class="figure" id="fig-rsa-key-fields">
-<img alt="../_images/rsa_key_fields.svg" src="../_images/rsa_key_fields.svg" /><p class="caption"><span class="caption-number">Figure 15 </span><span class="caption-text">RSA key encoding</span></p>
-</div>
-<p>PAIR is either 0 for a public key, or 3 for a key pair.</p>
-<p>The defined values for RSA keys are shown in <span><a class="reference internal" href="#table-rsa-type"><span class="numref">Table 21</span></a></span>.</p>
-<table border="1" class="colwidths-auto docutils align-left" id="table-rsa-type">
-<caption><span class="caption-number">Table 21 </span><span class="caption-text">RSA key values</span></caption>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">RSA key type</th>
-<th class="head">Key type</th>
-<th class="head">Key type value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>Public key</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_RSA_PUBLIC_KEY" title="PSA_KEY_TYPE_RSA_PUBLIC_KEY"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_RSA_PUBLIC_KEY</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x4001</span></code></td>
-</tr>
-<tr class="row-odd"><td>Key pair</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_RSA_KEY_PAIR" title="PSA_KEY_TYPE_RSA_KEY_PAIR"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_RSA_KEY_PAIR</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x7001</span></code></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="section" id="elliptic-curve-key-encoding">
-<span id="ecc-key-encoding"></span><h4>Elliptic Curve key encoding</h4>
-<p>The key type for Elliptic Curve keys defined in this specification are encoded as shown in <span><a class="reference internal" href="#fig-ecc-key-fields"><span class="numref">Figure 16</span></a></span>.</p>
-<div class="figure" id="fig-ecc-key-fields">
-<img alt="../_images/ecc_key_fields.svg" src="../_images/ecc_key_fields.svg" /><p class="caption"><span class="caption-number">Figure 16 </span><span class="caption-text">Elliptic Curve key encoding</span></p>
-</div>
-<p>PAIR is either 0 for a public key, or 3 for a key pair.</p>
-<p>The defined values for ECC-FAMILY and P are shown in <span><a class="reference internal" href="#table-ecc-type"><span class="numref">Table 22</span></a></span>.</p>
-<table border="1" class="colwidths-auto docutils align-left" id="table-ecc-type">
-<caption><span class="caption-number">Table 22 </span><span class="caption-text">ECC key family values</span></caption>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">ECC key family</th>
-<th class="head">ECC-FAMILY</th>
-<th class="head">P</th>
-<th class="head">ECC family <sup>a</sup></th>
-<th class="head">Public key value</th>
-<th class="head">Key pair value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>SECP K1</td>
-<td>0x0B</td>
-<td>1</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_SECP_K1" title="PSA_ECC_FAMILY_SECP_K1"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_SECP_K1</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x4117</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x7117</span></code></td>
-</tr>
-<tr class="row-odd"><td>SECP R1</td>
-<td>0x09</td>
-<td>0</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_SECP_R1" title="PSA_ECC_FAMILY_SECP_R1"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_SECP_R1</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x4112</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x7112</span></code></td>
-</tr>
-<tr class="row-even"><td>SECP R2</td>
-<td>0x0D</td>
-<td>1</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_SECP_R2" title="PSA_ECC_FAMILY_SECP_R2"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_SECP_R2</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x411B</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x711B</span></code></td>
-</tr>
-<tr class="row-odd"><td>SECT K1</td>
-<td>0x13</td>
-<td>1</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_SECT_K1" title="PSA_ECC_FAMILY_SECT_K1"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_SECT_K1</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x4127</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x7127</span></code></td>
-</tr>
-<tr class="row-even"><td>SECT R1</td>
-<td>0x11</td>
-<td>0</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_SECT_R1" title="PSA_ECC_FAMILY_SECT_R1"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_SECT_R1</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x4122</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x7122</span></code></td>
-</tr>
-<tr class="row-odd"><td>SECT R2</td>
-<td>0x15</td>
-<td>1</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_SECT_R2" title="PSA_ECC_FAMILY_SECT_R2"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_SECT_R2</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x412B</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x712B</span></code></td>
-</tr>
-<tr class="row-even"><td>Brainpool-P R1</td>
-<td>0x18</td>
-<td>0</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_BRAINPOOL_P_R1" title="PSA_ECC_FAMILY_BRAINPOOL_P_R1"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_BRAINPOOL_P_R1</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x4130</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x7130</span></code></td>
-</tr>
-<tr class="row-odd"><td>FRP</td>
-<td>0x19</td>
-<td>1</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_FRP" title="PSA_ECC_FAMILY_FRP"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_FRP</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x4133</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x7133</span></code></td>
-</tr>
-<tr class="row-even"><td>Montgomery</td>
-<td>0x20</td>
-<td>1</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_MONTGOMERY" title="PSA_ECC_FAMILY_MONTGOMERY"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_MONTGOMERY</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x4141</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x7141</span></code></td>
-</tr>
-<tr class="row-odd"><td>Twisted Edwards</td>
-<td>0x21</td>
-<td>0</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_TWISTED_EDWARDS" title="PSA_ECC_FAMILY_TWISTED_EDWARDS"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_TWISTED_EDWARDS</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x4142</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x7142</span></code></td>
-</tr>
-</tbody>
-</table>
-<ol class="loweralpha simple">
-<li>The key type value is constructed from the Elliptic Curve family using either <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_ECC_PUBLIC_KEY" title="PSA_KEY_TYPE_ECC_PUBLIC_KEY"><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_ECC_PUBLIC_KEY</span></code></a><code class="docutils literal"><span class="pre">(</span></code><code class="docutils literal"><span class="pre">family</span></code><code class="docutils literal"><span class="pre">)</span></code> or <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_ECC_KEY_PAIR" title="PSA_KEY_TYPE_ECC_KEY_PAIR"><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_ECC_KEY_PAIR</span></code></a><code class="docutils literal"><span class="pre">(</span></code><code class="docutils literal"><span class="pre">family</span></code><code class="docutils literal"><span class="pre">)</span></code> as required.</li>
-</ol>
-</div>
-<div class="section" id="diffie-hellman-key-encoding">
-<span id="dh-key-encoding"></span><h4>Diffie Hellman key encoding</h4>
-<p>The key type for Diffie Hellman keys defined in this specification are encoded as shown in <span><a class="reference internal" href="#fig-dh-key-fields"><span class="numref">Figure 17</span></a></span>.</p>
-<div class="figure" id="fig-dh-key-fields">
-<img alt="../_images/dh_key_fields.svg" src="../_images/dh_key_fields.svg" /><p class="caption"><span class="caption-number">Figure 17 </span><span class="caption-text">Diffie Hellman key encoding</span></p>
-</div>
-<p>PAIR is either 0 for a public key, or 3 for a key pair.</p>
-<p>The defined values for DH-FAMILY and P are shown in <span><a class="reference internal" href="#table-dh-type"><span class="numref">Table 23</span></a></span>.</p>
-<table border="1" class="colwidths-auto docutils align-left" id="table-dh-type">
-<caption><span class="caption-number">Table 23 </span><span class="caption-text">Diffie Hellman key group values</span></caption>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">DH key group</th>
-<th class="head">DH-FAMILY</th>
-<th class="head">P</th>
-<th class="head">DH group <sup>a</sup></th>
-<th class="head">Public key value</th>
-<th class="head">Key pair value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>RFC7919</td>
-<td>0x01</td>
-<td>1</td>
-<td><a class="reference internal" href="../api/keys/types.html#c.PSA_DH_FAMILY_RFC7919" title="PSA_DH_FAMILY_RFC7919"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_DH_FAMILY_RFC7919</span></code></a></td>
-<td><code class="docutils literal"><span class="pre">0x4203</span></code></td>
-<td><code class="docutils literal"><span class="pre">0x7203</span></code></td>
-</tr>
-</tbody>
-</table>
-<ol class="loweralpha simple">
-<li>The key type value is constructed from the Diffie Hellman family using either <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_DH_PUBLIC_KEY" title="PSA_KEY_TYPE_DH_PUBLIC_KEY"><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_DH_PUBLIC_KEY</span></code></a><code class="docutils literal"><span class="pre">(</span></code><code class="docutils literal"><span class="pre">family</span></code><code class="docutils literal"><span class="pre">)</span></code> or <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_DH_KEY_PAIR" title="PSA_KEY_TYPE_DH_KEY_PAIR"><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_DH_KEY_PAIR</span></code></a><code class="docutils literal"><span class="pre">(</span></code><code class="docutils literal"><span class="pre">family</span></code><code class="docutils literal"><span class="pre">)</span></code> as required.</li>
-</ol>
-</div>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper"><h3><a href="../index.html"><b>PSA Crypto API</b></a></h3>
-IHI 0086<br/>
-Non-confidential<br/>
-Version 1.1.0
-<span style="color: red; font-weight: bold;"></span>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="../about.html">About this document</a></li>
-</ul>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="../overview/intro.html">1. Introduction</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/goals.html">2. Design goals</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/functionality.html">3. Functionality overview</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/sample-arch.html">4. Sample architectures</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/conventions.html">5. Library conventions</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/implementation.html">6. Implementation considerations</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/usage.html">7. Usage considerations</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api/library/index.html">8. Library management reference</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api/keys/index.html">9. Key management reference</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api/ops/index.html">10. Cryptographic operation reference</a></li>
-</ul>
-<ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="example_header.html">Example header file</a></li>
-<li class="toctree-l1 current"><a class="current reference internal" href="#">Algorithm and key type encoding</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#algorithm-identifier-encoding">Algorithm identifier encoding</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="#algorithm-categories">Algorithm categories</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#hash-algorithm-encoding">Hash algorithm encoding</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#mac-algorithm-encoding">MAC algorithm encoding</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#cipher-algorithm-encoding">Cipher algorithm encoding</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#aead-algorithm-encoding">AEAD algorithm encoding</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#key-derivation-algorithm-encoding">Key derivation algorithm encoding</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#asymmetric-signature-algorithm-encoding">Asymmetric signature algorithm encoding</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#asymmetric-encryption-algorithm-encoding">Asymmetric encryption algorithm encoding</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#key-agreement-algorithm-encoding">Key agreement algorithm encoding</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="#key-type-encoding">Key type encoding</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="#key-type-categories">Key type categories</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#raw-key-encoding">Raw key encoding</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#symmetric-key-encoding">Symmetric key encoding</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#asymmetric-key-encoding">Asymmetric key encoding</a></li>
-</ul>
-</li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="specdef_values.html">Example macro implementations</a></li>
-<li class="toctree-l1"><a class="reference internal" href="sra.html">Security Risk Assessment</a></li>
-<li class="toctree-l1"><a class="reference internal" href="history.html">Changes to the API</a></li>
-</ul>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="../psa_c-identifiers.html">Index of API elements</a></li>
-</ul>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="footer">
- © 2018-2022, Arm Limited or its affiliates. All rights reserved.
-
- |
- Powered by <a href="http://sphinx-doc.org/">Sphinx 1.6.7</a>
- & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
-
- </div>
-
-
-
-
- </body>
-</html>
\ No newline at end of file
+<meta http-equiv="Refresh" content="0; url='https://arm-software.github.io/psa-api/crypto/1.1/appendix/encodings.html'" />
diff --git a/docs/1.1.0/html/appendix/example_header.html b/docs/1.1.0/html/appendix/example_header.html
index 29cb346..3e253c6 100644
--- a/docs/1.1.0/html/appendix/example_header.html
+++ b/docs/1.1.0/html/appendix/example_header.html
@@ -1,735 +1 @@
-
-<!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/html; charset=utf-8" />
- <title>Example header file — PSA Crypto API 1.1.0 documentation</title>
- <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '1.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: false,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="author" title="About these documents" href="../about.html" />
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Algorithm and key type encoding" href="encodings.html" />
- <link rel="prev" title="10.10. Other cryptographic services" href="../api/ops/rng.html" />
-
- <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
-
- <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
- </head>
- <body>
-
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="example-header-file">
-<span id="appendix-example-header"></span><h1>Example header file</h1>
-<p>Each implementation of the PSA Crypto API must provide a header file named <code class="file docutils literal"><span class="pre">psa/crypto.h</span></code>, in which the API elements in this specification are defined.</p>
-<p>This appendix provides a example of the <code class="file docutils literal"><span class="pre">psa/crypto.h</span></code> header file with all of the API elements. This can be used as a starting point or reference for an implementation.</p>
-<div class="admonition note">
-<p class="first admonition-title">Note</p>
-<p>Not all of the API elements are fully defined. An implementation must provide the full definition.</p>
-<p class="last">The header will not compile without these missing definitions, and might require reordering to satisfy C compilation rules.</p>
-</div>
-<div class="section" id="psa-crypto-h">
-<h2>psa/crypto.h</h2>
-<pre class="literal-block">
-typedef <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-type"><span class="std std-ref">/* implementation-defined type */</span></a></em> <a class="reference internal" href="../api/ops/aead.html#c.psa_aead_operation_t" title="psa_aead_operation_t">psa_aead_operation_t</a>;
-typedef uint32_t <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>;
-typedef <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-type"><span class="std std-ref">/* implementation-defined type */</span></a></em> <a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_operation_t" title="psa_cipher_operation_t">psa_cipher_operation_t</a>;
-typedef uint8_t <a class="reference internal" href="../api/keys/types.html#c.psa_dh_family_t" title="psa_dh_family_t">psa_dh_family_t</a>;
-typedef uint8_t <a class="reference internal" href="../api/keys/types.html#c.psa_ecc_family_t" title="psa_ecc_family_t">psa_ecc_family_t</a>;
-typedef <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-type"><span class="std std-ref">/* implementation-defined type */</span></a></em> <a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_operation_t" title="psa_hash_operation_t">psa_hash_operation_t</a>;
-typedef <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-type"><span class="std std-ref">/* implementation-defined type */</span></a></em> <a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a>;
-typedef <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-type"><span class="std std-ref">/* implementation-defined type */</span></a></em> <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_operation_t" title="psa_key_derivation_operation_t">psa_key_derivation_operation_t</a>;
-typedef uint16_t <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_step_t" title="psa_key_derivation_step_t">psa_key_derivation_step_t</a>;
-typedef uint32_t <a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a>;
-typedef uint32_t <a class="reference internal" href="../api/keys/lifetimes.html#c.psa_key_lifetime_t" title="psa_key_lifetime_t">psa_key_lifetime_t</a>;
-typedef uint32_t <a class="reference internal" href="../api/keys/lifetimes.html#c.psa_key_location_t" title="psa_key_location_t">psa_key_location_t</a>;
-typedef uint8_t <a class="reference internal" href="../api/keys/lifetimes.html#c.psa_key_persistence_t" title="psa_key_persistence_t">psa_key_persistence_t</a>;
-typedef uint16_t <a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>;
-typedef uint32_t <a class="reference internal" href="../api/keys/policy.html#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>;
-typedef <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-type"><span class="std std-ref">/* implementation-defined type */</span></a></em> <a class="reference internal" href="../api/ops/macs.html#c.psa_mac_operation_t" title="psa_mac_operation_t">psa_mac_operation_t</a>;
-typedef int32_t <a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>;
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_DECRYPT_OUTPUT_MAX_SIZE" title="PSA_AEAD_DECRYPT_OUTPUT_MAX_SIZE">PSA_AEAD_DECRYPT_OUTPUT_MAX_SIZE</a>(ciphertext_length) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_DECRYPT_OUTPUT_SIZE" title="PSA_AEAD_DECRYPT_OUTPUT_SIZE">PSA_AEAD_DECRYPT_OUTPUT_SIZE</a>(key_type, alg, ciphertext_length) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_ENCRYPT_OUTPUT_MAX_SIZE" title="PSA_AEAD_ENCRYPT_OUTPUT_MAX_SIZE">PSA_AEAD_ENCRYPT_OUTPUT_MAX_SIZE</a>(plaintext_length) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_ENCRYPT_OUTPUT_SIZE" title="PSA_AEAD_ENCRYPT_OUTPUT_SIZE">PSA_AEAD_ENCRYPT_OUTPUT_SIZE</a>(key_type, alg, plaintext_length) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_FINISH_OUTPUT_MAX_SIZE" title="PSA_AEAD_FINISH_OUTPUT_MAX_SIZE">PSA_AEAD_FINISH_OUTPUT_MAX_SIZE</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_FINISH_OUTPUT_SIZE" title="PSA_AEAD_FINISH_OUTPUT_SIZE">PSA_AEAD_FINISH_OUTPUT_SIZE</a>(key_type, alg) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_NONCE_LENGTH" title="PSA_AEAD_NONCE_LENGTH">PSA_AEAD_NONCE_LENGTH</a>(key_type, alg) <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_NONCE_MAX_SIZE" title="PSA_AEAD_NONCE_MAX_SIZE">PSA_AEAD_NONCE_MAX_SIZE</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_OPERATION_INIT" title="PSA_AEAD_OPERATION_INIT">PSA_AEAD_OPERATION_INIT</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_TAG_LENGTH" title="PSA_AEAD_TAG_LENGTH">PSA_AEAD_TAG_LENGTH</a>(key_type, key_bits, alg) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_TAG_MAX_SIZE" title="PSA_AEAD_TAG_MAX_SIZE">PSA_AEAD_TAG_MAX_SIZE</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_UPDATE_OUTPUT_MAX_SIZE" title="PSA_AEAD_UPDATE_OUTPUT_MAX_SIZE">PSA_AEAD_UPDATE_OUTPUT_MAX_SIZE</a>(input_length) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_UPDATE_OUTPUT_SIZE" title="PSA_AEAD_UPDATE_OUTPUT_SIZE">PSA_AEAD_UPDATE_OUTPUT_SIZE</a>(key_type, alg, input_length) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_VERIFY_OUTPUT_MAX_SIZE" title="PSA_AEAD_VERIFY_OUTPUT_MAX_SIZE">PSA_AEAD_VERIFY_OUTPUT_MAX_SIZE</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_VERIFY_OUTPUT_SIZE" title="PSA_AEAD_VERIFY_OUTPUT_SIZE">PSA_AEAD_VERIFY_OUTPUT_SIZE</a>(key_type, alg) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG" title="PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG">PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG</a>(aead_alg, min_tag_length) \
- <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG" title="PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG">PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG</a>(aead_alg) \
- <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_AEAD_WITH_SHORTENED_TAG" title="PSA_ALG_AEAD_WITH_SHORTENED_TAG">PSA_ALG_AEAD_WITH_SHORTENED_TAG</a>(aead_alg, tag_length) \
- <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ANY_HASH" title="PSA_ALG_ANY_HASH">PSA_ALG_ANY_HASH</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x020000ff)
-#define <a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_AT_LEAST_THIS_LENGTH_MAC" title="PSA_ALG_AT_LEAST_THIS_LENGTH_MAC">PSA_ALG_AT_LEAST_THIS_LENGTH_MAC</a>(mac_alg, min_mac_length) \
- <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_CBC_MAC" title="PSA_ALG_CBC_MAC">PSA_ALG_CBC_MAC</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x03c00100)
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_CBC_NO_PADDING" title="PSA_ALG_CBC_NO_PADDING">PSA_ALG_CBC_NO_PADDING</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x04404000)
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_CBC_PKCS7" title="PSA_ALG_CBC_PKCS7">PSA_ALG_CBC_PKCS7</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x04404100)
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_CCM" title="PSA_ALG_CCM">PSA_ALG_CCM</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x05500100)
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_CFB" title="PSA_ALG_CFB">PSA_ALG_CFB</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x04c01100)
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_CHACHA20_POLY1305" title="PSA_ALG_CHACHA20_POLY1305">PSA_ALG_CHACHA20_POLY1305</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x05100500)
-#define <a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_CMAC" title="PSA_ALG_CMAC">PSA_ALG_CMAC</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x03c00200)
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_CTR" title="PSA_ALG_CTR">PSA_ALG_CTR</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x04c01000)
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_DETERMINISTIC_ECDSA" title="PSA_ALG_DETERMINISTIC_ECDSA">PSA_ALG_DETERMINISTIC_ECDSA</a>(hash_alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_ECB_NO_PADDING" title="PSA_ALG_ECB_NO_PADDING">PSA_ALG_ECB_NO_PADDING</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x04404400)
-#define <a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_ECDH" title="PSA_ALG_ECDH">PSA_ALG_ECDH</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x09020000)
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ECDSA" title="PSA_ALG_ECDSA">PSA_ALG_ECDSA</a>(hash_alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ECDSA_ANY" title="PSA_ALG_ECDSA_ANY">PSA_ALG_ECDSA_ANY</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>) 0x06000600)
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ED25519PH" title="PSA_ALG_ED25519PH">PSA_ALG_ED25519PH</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>) 0x0600090B)
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ED448PH" title="PSA_ALG_ED448PH">PSA_ALG_ED448PH</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>) 0x06000915)
-#define <a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_FFDH" title="PSA_ALG_FFDH">PSA_ALG_FFDH</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x09010000)
-#define <a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_FULL_LENGTH_MAC" title="PSA_ALG_FULL_LENGTH_MAC">PSA_ALG_FULL_LENGTH_MAC</a>(mac_alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_GCM" title="PSA_ALG_GCM">PSA_ALG_GCM</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x05500200)
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_GET_HASH" title="PSA_ALG_GET_HASH">PSA_ALG_GET_HASH</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_HKDF" title="PSA_ALG_HKDF">PSA_ALG_HKDF</a>(hash_alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_HMAC" title="PSA_ALG_HMAC">PSA_ALG_HMAC</a>(hash_alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_AEAD" title="PSA_ALG_IS_AEAD">PSA_ALG_IS_AEAD</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_IS_AEAD_ON_BLOCK_CIPHER" title="PSA_ALG_IS_AEAD_ON_BLOCK_CIPHER">PSA_ALG_IS_AEAD_ON_BLOCK_CIPHER</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_ASYMMETRIC_ENCRYPTION" title="PSA_ALG_IS_ASYMMETRIC_ENCRYPTION">PSA_ALG_IS_ASYMMETRIC_ENCRYPTION</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_IS_BLOCK_CIPHER_MAC" title="PSA_ALG_IS_BLOCK_CIPHER_MAC">PSA_ALG_IS_BLOCK_CIPHER_MAC</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_CIPHER" title="PSA_ALG_IS_CIPHER">PSA_ALG_IS_CIPHER</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_DETERMINISTIC_ECDSA" title="PSA_ALG_IS_DETERMINISTIC_ECDSA">PSA_ALG_IS_DETERMINISTIC_ECDSA</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_IS_ECDH" title="PSA_ALG_IS_ECDH">PSA_ALG_IS_ECDH</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_ECDSA" title="PSA_ALG_IS_ECDSA">PSA_ALG_IS_ECDSA</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_IS_FFDH" title="PSA_ALG_IS_FFDH">PSA_ALG_IS_FFDH</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_HASH" title="PSA_ALG_IS_HASH">PSA_ALG_IS_HASH</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_HASH_AND_SIGN" title="PSA_ALG_IS_HASH_AND_SIGN">PSA_ALG_IS_HASH_AND_SIGN</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_HASH_EDDSA" title="PSA_ALG_IS_HASH_EDDSA">PSA_ALG_IS_HASH_EDDSA</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_IS_HKDF" title="PSA_ALG_IS_HKDF">PSA_ALG_IS_HKDF</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_IS_HMAC" title="PSA_ALG_IS_HMAC">PSA_ALG_IS_HMAC</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_KEY_AGREEMENT" title="PSA_ALG_IS_KEY_AGREEMENT">PSA_ALG_IS_KEY_AGREEMENT</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_KEY_DERIVATION" title="PSA_ALG_IS_KEY_DERIVATION">PSA_ALG_IS_KEY_DERIVATION</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_IS_KEY_DERIVATION_STRETCHING" title="PSA_ALG_IS_KEY_DERIVATION_STRETCHING">PSA_ALG_IS_KEY_DERIVATION_STRETCHING</a>(alg) \
- <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_MAC" title="PSA_ALG_IS_MAC">PSA_ALG_IS_MAC</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_IS_PBKDF2_HMAC" title="PSA_ALG_IS_PBKDF2_HMAC">PSA_ALG_IS_PBKDF2_HMAC</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_RANDOMIZED_ECDSA" title="PSA_ALG_IS_RANDOMIZED_ECDSA">PSA_ALG_IS_RANDOMIZED_ECDSA</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_IS_RAW_KEY_AGREEMENT" title="PSA_ALG_IS_RAW_KEY_AGREEMENT">PSA_ALG_IS_RAW_KEY_AGREEMENT</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/pke.html#c.PSA_ALG_IS_RSA_OAEP" title="PSA_ALG_IS_RSA_OAEP">PSA_ALG_IS_RSA_OAEP</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_RSA_PKCS1V15_SIGN" title="PSA_ALG_IS_RSA_PKCS1V15_SIGN">PSA_ALG_IS_RSA_PKCS1V15_SIGN</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_RSA_PSS" title="PSA_ALG_IS_RSA_PSS">PSA_ALG_IS_RSA_PSS</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_RSA_PSS_ANY_SALT" title="PSA_ALG_IS_RSA_PSS_ANY_SALT">PSA_ALG_IS_RSA_PSS_ANY_SALT</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_RSA_PSS_STANDARD_SALT" title="PSA_ALG_IS_RSA_PSS_STANDARD_SALT">PSA_ALG_IS_RSA_PSS_STANDARD_SALT</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_SIGN" title="PSA_ALG_IS_SIGN">PSA_ALG_IS_SIGN</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_SIGN_HASH" title="PSA_ALG_IS_SIGN_HASH">PSA_ALG_IS_SIGN_HASH</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_SIGN_MESSAGE" title="PSA_ALG_IS_SIGN_MESSAGE">PSA_ALG_IS_SIGN_MESSAGE</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_IS_STREAM_CIPHER" title="PSA_ALG_IS_STREAM_CIPHER">PSA_ALG_IS_STREAM_CIPHER</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_IS_TLS12_PRF" title="PSA_ALG_IS_TLS12_PRF">PSA_ALG_IS_TLS12_PRF</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_IS_TLS12_PSK_TO_MS" title="PSA_ALG_IS_TLS12_PSK_TO_MS">PSA_ALG_IS_TLS12_PSK_TO_MS</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_WILDCARD" title="PSA_ALG_IS_WILDCARD">PSA_ALG_IS_WILDCARD</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_KEY_AGREEMENT" title="PSA_ALG_KEY_AGREEMENT">PSA_ALG_KEY_AGREEMENT</a>(ka_alg, kdf_alg) \
- <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_KEY_AGREEMENT_GET_BASE" title="PSA_ALG_KEY_AGREEMENT_GET_BASE">PSA_ALG_KEY_AGREEMENT_GET_BASE</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_KEY_AGREEMENT_GET_KDF" title="PSA_ALG_KEY_AGREEMENT_GET_KDF">PSA_ALG_KEY_AGREEMENT_GET_KDF</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_MD2" title="PSA_ALG_MD2">PSA_ALG_MD2</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x02000001)
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_MD4" title="PSA_ALG_MD4">PSA_ALG_MD4</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x02000002)
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_MD5" title="PSA_ALG_MD5">PSA_ALG_MD5</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x02000003)
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_NONE" title="PSA_ALG_NONE">PSA_ALG_NONE</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0)
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_OFB" title="PSA_ALG_OFB">PSA_ALG_OFB</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x04c01200)
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_PBKDF2_AES_CMAC_PRF_128" title="PSA_ALG_PBKDF2_AES_CMAC_PRF_128">PSA_ALG_PBKDF2_AES_CMAC_PRF_128</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x08800200)
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_PBKDF2_HMAC" title="PSA_ALG_PBKDF2_HMAC">PSA_ALG_PBKDF2_HMAC</a>(hash_alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_PURE_EDDSA" title="PSA_ALG_PURE_EDDSA">PSA_ALG_PURE_EDDSA</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>) 0x06000800)
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_RIPEMD160" title="PSA_ALG_RIPEMD160">PSA_ALG_RIPEMD160</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x02000004)
-#define <a class="reference internal" href="../api/ops/pke.html#c.PSA_ALG_RSA_OAEP" title="PSA_ALG_RSA_OAEP">PSA_ALG_RSA_OAEP</a>(hash_alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/pke.html#c.PSA_ALG_RSA_PKCS1V15_CRYPT" title="PSA_ALG_RSA_PKCS1V15_CRYPT">PSA_ALG_RSA_PKCS1V15_CRYPT</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x07000200)
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PKCS1V15_SIGN" title="PSA_ALG_RSA_PKCS1V15_SIGN">PSA_ALG_RSA_PKCS1V15_SIGN</a>(hash_alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PKCS1V15_SIGN_RAW" title="PSA_ALG_RSA_PKCS1V15_SIGN_RAW">PSA_ALG_RSA_PKCS1V15_SIGN_RAW</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>) 0x06000200)
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PSS" title="PSA_ALG_RSA_PSS">PSA_ALG_RSA_PSS</a>(hash_alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PSS_ANY_SALT" title="PSA_ALG_RSA_PSS_ANY_SALT">PSA_ALG_RSA_PSS_ANY_SALT</a>(hash_alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA3_224" title="PSA_ALG_SHA3_224">PSA_ALG_SHA3_224</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x02000010)
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA3_256" title="PSA_ALG_SHA3_256">PSA_ALG_SHA3_256</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x02000011)
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA3_384" title="PSA_ALG_SHA3_384">PSA_ALG_SHA3_384</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x02000012)
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA3_512" title="PSA_ALG_SHA3_512">PSA_ALG_SHA3_512</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x02000013)
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHAKE256_512" title="PSA_ALG_SHAKE256_512">PSA_ALG_SHAKE256_512</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x02000015)
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_1" title="PSA_ALG_SHA_1">PSA_ALG_SHA_1</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x02000005)
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_224" title="PSA_ALG_SHA_224">PSA_ALG_SHA_224</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x02000008)
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_256" title="PSA_ALG_SHA_256">PSA_ALG_SHA_256</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x02000009)
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_384" title="PSA_ALG_SHA_384">PSA_ALG_SHA_384</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x0200000a)
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_512" title="PSA_ALG_SHA_512">PSA_ALG_SHA_512</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x0200000b)
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_512_224" title="PSA_ALG_SHA_512_224">PSA_ALG_SHA_512_224</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x0200000c)
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_512_256" title="PSA_ALG_SHA_512_256">PSA_ALG_SHA_512_256</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x0200000d)
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SM3" title="PSA_ALG_SM3">PSA_ALG_SM3</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x02000014)
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_STREAM_CIPHER" title="PSA_ALG_STREAM_CIPHER">PSA_ALG_STREAM_CIPHER</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x04800100)
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_TLS12_PRF" title="PSA_ALG_TLS12_PRF">PSA_ALG_TLS12_PRF</a>(hash_alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_TLS12_PSK_TO_MS" title="PSA_ALG_TLS12_PSK_TO_MS">PSA_ALG_TLS12_PSK_TO_MS</a>(hash_alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_TRUNCATED_MAC" title="PSA_ALG_TRUNCATED_MAC">PSA_ALG_TRUNCATED_MAC</a>(mac_alg, mac_length) \
- <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_XTS" title="PSA_ALG_XTS">PSA_ALG_XTS</a> ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)0x0440ff00)
-#define <a class="reference internal" href="../api/ops/pke.html#c.PSA_ASYMMETRIC_DECRYPT_OUTPUT_MAX_SIZE" title="PSA_ASYMMETRIC_DECRYPT_OUTPUT_MAX_SIZE">PSA_ASYMMETRIC_DECRYPT_OUTPUT_MAX_SIZE</a> \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/pke.html#c.PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE" title="PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE">PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE</a>(key_type, key_bits, alg) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/pke.html#c.PSA_ASYMMETRIC_ENCRYPT_OUTPUT_MAX_SIZE" title="PSA_ASYMMETRIC_ENCRYPT_OUTPUT_MAX_SIZE">PSA_ASYMMETRIC_ENCRYPT_OUTPUT_MAX_SIZE</a> \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/pke.html#c.PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE" title="PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE">PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE</a>(key_type, key_bits, alg) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_BLOCK_CIPHER_BLOCK_LENGTH" title="PSA_BLOCK_CIPHER_BLOCK_LENGTH">PSA_BLOCK_CIPHER_BLOCK_LENGTH</a>(type) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE" title="PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE">PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_DECRYPT_OUTPUT_MAX_SIZE" title="PSA_CIPHER_DECRYPT_OUTPUT_MAX_SIZE">PSA_CIPHER_DECRYPT_OUTPUT_MAX_SIZE</a>(input_length) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_DECRYPT_OUTPUT_SIZE" title="PSA_CIPHER_DECRYPT_OUTPUT_SIZE">PSA_CIPHER_DECRYPT_OUTPUT_SIZE</a>(key_type, alg, input_length) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_ENCRYPT_OUTPUT_MAX_SIZE" title="PSA_CIPHER_ENCRYPT_OUTPUT_MAX_SIZE">PSA_CIPHER_ENCRYPT_OUTPUT_MAX_SIZE</a>(input_length) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_ENCRYPT_OUTPUT_SIZE" title="PSA_CIPHER_ENCRYPT_OUTPUT_SIZE">PSA_CIPHER_ENCRYPT_OUTPUT_SIZE</a>(key_type, alg, input_length) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_FINISH_OUTPUT_MAX_SIZE" title="PSA_CIPHER_FINISH_OUTPUT_MAX_SIZE">PSA_CIPHER_FINISH_OUTPUT_MAX_SIZE</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_FINISH_OUTPUT_SIZE" title="PSA_CIPHER_FINISH_OUTPUT_SIZE">PSA_CIPHER_FINISH_OUTPUT_SIZE</a>(key_type, alg) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_IV_LENGTH" title="PSA_CIPHER_IV_LENGTH">PSA_CIPHER_IV_LENGTH</a>(key_type, alg) <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_IV_MAX_SIZE" title="PSA_CIPHER_IV_MAX_SIZE">PSA_CIPHER_IV_MAX_SIZE</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_OPERATION_INIT" title="PSA_CIPHER_OPERATION_INIT">PSA_CIPHER_OPERATION_INIT</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_UPDATE_OUTPUT_MAX_SIZE" title="PSA_CIPHER_UPDATE_OUTPUT_MAX_SIZE">PSA_CIPHER_UPDATE_OUTPUT_MAX_SIZE</a>(input_length) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_UPDATE_OUTPUT_SIZE" title="PSA_CIPHER_UPDATE_OUTPUT_SIZE">PSA_CIPHER_UPDATE_OUTPUT_SIZE</a>(key_type, alg, input_length) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/library/library.html#c.PSA_CRYPTO_API_VERSION_MAJOR" title="PSA_CRYPTO_API_VERSION_MAJOR">PSA_CRYPTO_API_VERSION_MAJOR</a> 1
-#define <a class="reference internal" href="../api/library/library.html#c.PSA_CRYPTO_API_VERSION_MINOR" title="PSA_CRYPTO_API_VERSION_MINOR">PSA_CRYPTO_API_VERSION_MINOR</a> 1
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_DH_FAMILY_RFC7919" title="PSA_DH_FAMILY_RFC7919">PSA_DH_FAMILY_RFC7919</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_dh_family_t" title="psa_dh_family_t">psa_dh_family_t</a>) 0x03)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_BRAINPOOL_P_R1" title="PSA_ECC_FAMILY_BRAINPOOL_P_R1">PSA_ECC_FAMILY_BRAINPOOL_P_R1</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_ecc_family_t" title="psa_ecc_family_t">psa_ecc_family_t</a>) 0x30)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_FRP" title="PSA_ECC_FAMILY_FRP">PSA_ECC_FAMILY_FRP</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_ecc_family_t" title="psa_ecc_family_t">psa_ecc_family_t</a>) 0x33)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_MONTGOMERY" title="PSA_ECC_FAMILY_MONTGOMERY">PSA_ECC_FAMILY_MONTGOMERY</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_ecc_family_t" title="psa_ecc_family_t">psa_ecc_family_t</a>) 0x41)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_SECP_K1" title="PSA_ECC_FAMILY_SECP_K1">PSA_ECC_FAMILY_SECP_K1</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_ecc_family_t" title="psa_ecc_family_t">psa_ecc_family_t</a>) 0x17)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_SECP_R1" title="PSA_ECC_FAMILY_SECP_R1">PSA_ECC_FAMILY_SECP_R1</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_ecc_family_t" title="psa_ecc_family_t">psa_ecc_family_t</a>) 0x12)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_SECP_R2" title="PSA_ECC_FAMILY_SECP_R2">PSA_ECC_FAMILY_SECP_R2</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_ecc_family_t" title="psa_ecc_family_t">psa_ecc_family_t</a>) 0x1b)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_SECT_K1" title="PSA_ECC_FAMILY_SECT_K1">PSA_ECC_FAMILY_SECT_K1</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_ecc_family_t" title="psa_ecc_family_t">psa_ecc_family_t</a>) 0x27)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_SECT_R1" title="PSA_ECC_FAMILY_SECT_R1">PSA_ECC_FAMILY_SECT_R1</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_ecc_family_t" title="psa_ecc_family_t">psa_ecc_family_t</a>) 0x22)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_SECT_R2" title="PSA_ECC_FAMILY_SECT_R2">PSA_ECC_FAMILY_SECT_R2</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_ecc_family_t" title="psa_ecc_family_t">psa_ecc_family_t</a>) 0x2b)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_TWISTED_EDWARDS" title="PSA_ECC_FAMILY_TWISTED_EDWARDS">PSA_ECC_FAMILY_TWISTED_EDWARDS</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_ecc_family_t" title="psa_ecc_family_t">psa_ecc_family_t</a>) 0x42)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_ALREADY_EXISTS" title="PSA_ERROR_ALREADY_EXISTS">PSA_ERROR_ALREADY_EXISTS</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-139)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_BAD_STATE" title="PSA_ERROR_BAD_STATE">PSA_ERROR_BAD_STATE</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-137)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_BUFFER_TOO_SMALL" title="PSA_ERROR_BUFFER_TOO_SMALL">PSA_ERROR_BUFFER_TOO_SMALL</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-138)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_COMMUNICATION_FAILURE" title="PSA_ERROR_COMMUNICATION_FAILURE">PSA_ERROR_COMMUNICATION_FAILURE</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-145)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_CORRUPTION_DETECTED" title="PSA_ERROR_CORRUPTION_DETECTED">PSA_ERROR_CORRUPTION_DETECTED</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-151)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_DATA_CORRUPT" title="PSA_ERROR_DATA_CORRUPT">PSA_ERROR_DATA_CORRUPT</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-152)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_DATA_INVALID" title="PSA_ERROR_DATA_INVALID">PSA_ERROR_DATA_INVALID</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-153)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_DOES_NOT_EXIST" title="PSA_ERROR_DOES_NOT_EXIST">PSA_ERROR_DOES_NOT_EXIST</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-140)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_GENERIC_ERROR" title="PSA_ERROR_GENERIC_ERROR">PSA_ERROR_GENERIC_ERROR</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-132)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_HARDWARE_FAILURE" title="PSA_ERROR_HARDWARE_FAILURE">PSA_ERROR_HARDWARE_FAILURE</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-147)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_INSUFFICIENT_DATA" title="PSA_ERROR_INSUFFICIENT_DATA">PSA_ERROR_INSUFFICIENT_DATA</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-143)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_INSUFFICIENT_ENTROPY" title="PSA_ERROR_INSUFFICIENT_ENTROPY">PSA_ERROR_INSUFFICIENT_ENTROPY</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-148)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_INSUFFICIENT_MEMORY" title="PSA_ERROR_INSUFFICIENT_MEMORY">PSA_ERROR_INSUFFICIENT_MEMORY</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-141)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_INSUFFICIENT_STORAGE" title="PSA_ERROR_INSUFFICIENT_STORAGE">PSA_ERROR_INSUFFICIENT_STORAGE</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-142)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_INVALID_ARGUMENT" title="PSA_ERROR_INVALID_ARGUMENT">PSA_ERROR_INVALID_ARGUMENT</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-135)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_INVALID_HANDLE" title="PSA_ERROR_INVALID_HANDLE">PSA_ERROR_INVALID_HANDLE</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-136)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_INVALID_PADDING" title="PSA_ERROR_INVALID_PADDING">PSA_ERROR_INVALID_PADDING</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-150)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_INVALID_SIGNATURE" title="PSA_ERROR_INVALID_SIGNATURE">PSA_ERROR_INVALID_SIGNATURE</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-149)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_NOT_PERMITTED" title="PSA_ERROR_NOT_PERMITTED">PSA_ERROR_NOT_PERMITTED</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-133)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_NOT_SUPPORTED" title="PSA_ERROR_NOT_SUPPORTED">PSA_ERROR_NOT_SUPPORTED</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-134)
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_STORAGE_FAILURE" title="PSA_ERROR_STORAGE_FAILURE">PSA_ERROR_STORAGE_FAILURE</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)-146)
-#define <a class="reference internal" href="../api/keys/management.html#c.PSA_EXPORT_KEY_OUTPUT_SIZE" title="PSA_EXPORT_KEY_OUTPUT_SIZE">PSA_EXPORT_KEY_OUTPUT_SIZE</a>(key_type, key_bits) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/management.html#c.PSA_EXPORT_KEY_PAIR_MAX_SIZE" title="PSA_EXPORT_KEY_PAIR_MAX_SIZE">PSA_EXPORT_KEY_PAIR_MAX_SIZE</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/management.html#c.PSA_EXPORT_PUBLIC_KEY_MAX_SIZE" title="PSA_EXPORT_PUBLIC_KEY_MAX_SIZE">PSA_EXPORT_PUBLIC_KEY_MAX_SIZE</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/management.html#c.PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE" title="PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE">PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE</a>(key_type, key_bits) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_BLOCK_LENGTH" title="PSA_HASH_BLOCK_LENGTH">PSA_HASH_BLOCK_LENGTH</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_LENGTH" title="PSA_HASH_LENGTH">PSA_HASH_LENGTH</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_MAX_SIZE" title="PSA_HASH_MAX_SIZE">PSA_HASH_MAX_SIZE</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_OPERATION_INIT" title="PSA_HASH_OPERATION_INIT">PSA_HASH_OPERATION_INIT</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_SUSPEND_ALGORITHM_FIELD_LENGTH" title="PSA_HASH_SUSPEND_ALGORITHM_FIELD_LENGTH">PSA_HASH_SUSPEND_ALGORITHM_FIELD_LENGTH</a> ((size_t)4)
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_SUSPEND_HASH_STATE_FIELD_LENGTH" title="PSA_HASH_SUSPEND_HASH_STATE_FIELD_LENGTH">PSA_HASH_SUSPEND_HASH_STATE_FIELD_LENGTH</a>(alg) \
- <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_SUSPEND_INPUT_LENGTH_FIELD_LENGTH" title="PSA_HASH_SUSPEND_INPUT_LENGTH_FIELD_LENGTH">PSA_HASH_SUSPEND_INPUT_LENGTH_FIELD_LENGTH</a>(alg) \
- <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_SUSPEND_OUTPUT_MAX_SIZE" title="PSA_HASH_SUSPEND_OUTPUT_MAX_SIZE">PSA_HASH_SUSPEND_OUTPUT_MAX_SIZE</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_SUSPEND_OUTPUT_SIZE" title="PSA_HASH_SUSPEND_OUTPUT_SIZE">PSA_HASH_SUSPEND_OUTPUT_SIZE</a>(alg) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/attributes.html#c.PSA_KEY_ATTRIBUTES_INIT" title="PSA_KEY_ATTRIBUTES_INIT">PSA_KEY_ATTRIBUTES_INIT</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_KEY_DERIVATION_INPUT_CONTEXT" title="PSA_KEY_DERIVATION_INPUT_CONTEXT">PSA_KEY_DERIVATION_INPUT_CONTEXT</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_KEY_DERIVATION_INPUT_COST" title="PSA_KEY_DERIVATION_INPUT_COST">PSA_KEY_DERIVATION_INPUT_COST</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_KEY_DERIVATION_INPUT_INFO" title="PSA_KEY_DERIVATION_INPUT_INFO">PSA_KEY_DERIVATION_INPUT_INFO</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_KEY_DERIVATION_INPUT_LABEL" title="PSA_KEY_DERIVATION_INPUT_LABEL">PSA_KEY_DERIVATION_INPUT_LABEL</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_KEY_DERIVATION_INPUT_PASSWORD" title="PSA_KEY_DERIVATION_INPUT_PASSWORD">PSA_KEY_DERIVATION_INPUT_PASSWORD</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_KEY_DERIVATION_INPUT_SALT" title="PSA_KEY_DERIVATION_INPUT_SALT">PSA_KEY_DERIVATION_INPUT_SALT</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_KEY_DERIVATION_INPUT_SECRET" title="PSA_KEY_DERIVATION_INPUT_SECRET">PSA_KEY_DERIVATION_INPUT_SECRET</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_KEY_DERIVATION_INPUT_SEED" title="PSA_KEY_DERIVATION_INPUT_SEED">PSA_KEY_DERIVATION_INPUT_SEED</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_KEY_DERIVATION_OPERATION_INIT" title="PSA_KEY_DERIVATION_OPERATION_INIT">PSA_KEY_DERIVATION_OPERATION_INIT</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_KEY_DERIVATION_UNLIMITED_CAPACITY" title="PSA_KEY_DERIVATION_UNLIMITED_CAPACITY">PSA_KEY_DERIVATION_UNLIMITED_CAPACITY</a> \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/ids.html#c.PSA_KEY_ID_NULL" title="PSA_KEY_ID_NULL">PSA_KEY_ID_NULL</a> ((<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a>)0)
-#define <a class="reference internal" href="../api/keys/ids.html#c.PSA_KEY_ID_USER_MAX" title="PSA_KEY_ID_USER_MAX">PSA_KEY_ID_USER_MAX</a> ((<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a>)0x3fffffff)
-#define <a class="reference internal" href="../api/keys/ids.html#c.PSA_KEY_ID_USER_MIN" title="PSA_KEY_ID_USER_MIN">PSA_KEY_ID_USER_MIN</a> ((<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a>)0x00000001)
-#define <a class="reference internal" href="../api/keys/ids.html#c.PSA_KEY_ID_VENDOR_MAX" title="PSA_KEY_ID_VENDOR_MAX">PSA_KEY_ID_VENDOR_MAX</a> ((<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a>)0x7fffffff)
-#define <a class="reference internal" href="../api/keys/ids.html#c.PSA_KEY_ID_VENDOR_MIN" title="PSA_KEY_ID_VENDOR_MIN">PSA_KEY_ID_VENDOR_MIN</a> ((<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a>)0x40000000)
-#define <a class="reference internal" href="../api/keys/lifetimes.html#c.PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION" title="PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION">PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION</a>(persistence, location) \
- ((location) << 8 | (persistence))
-#define <a class="reference internal" href="../api/keys/lifetimes.html#c.PSA_KEY_LIFETIME_GET_LOCATION" title="PSA_KEY_LIFETIME_GET_LOCATION">PSA_KEY_LIFETIME_GET_LOCATION</a>(lifetime) \
- ((<a class="reference internal" href="../api/keys/lifetimes.html#c.psa_key_location_t" title="psa_key_location_t">psa_key_location_t</a>) ((lifetime) >> 8))
-#define <a class="reference internal" href="../api/keys/lifetimes.html#c.PSA_KEY_LIFETIME_GET_PERSISTENCE" title="PSA_KEY_LIFETIME_GET_PERSISTENCE">PSA_KEY_LIFETIME_GET_PERSISTENCE</a>(lifetime) \
- ((<a class="reference internal" href="../api/keys/lifetimes.html#c.psa_key_persistence_t" title="psa_key_persistence_t">psa_key_persistence_t</a>) ((lifetime) & 0x000000ff))
-#define <a class="reference internal" href="../api/keys/lifetimes.html#c.PSA_KEY_LIFETIME_IS_VOLATILE" title="PSA_KEY_LIFETIME_IS_VOLATILE">PSA_KEY_LIFETIME_IS_VOLATILE</a>(lifetime) \
- (<a class="reference internal" href="../api/keys/lifetimes.html#c.PSA_KEY_LIFETIME_GET_PERSISTENCE" title="PSA_KEY_LIFETIME_GET_PERSISTENCE">PSA_KEY_LIFETIME_GET_PERSISTENCE</a>(lifetime) == <a class="reference internal" href="../api/keys/lifetimes.html#c.PSA_KEY_PERSISTENCE_VOLATILE" title="PSA_KEY_PERSISTENCE_VOLATILE">PSA_KEY_PERSISTENCE_VOLATILE</a>)
-#define <a class="reference internal" href="../api/keys/lifetimes.html#c.PSA_KEY_LIFETIME_PERSISTENT" title="PSA_KEY_LIFETIME_PERSISTENT">PSA_KEY_LIFETIME_PERSISTENT</a> ((<a class="reference internal" href="../api/keys/lifetimes.html#c.psa_key_lifetime_t" title="psa_key_lifetime_t">psa_key_lifetime_t</a>) 0x00000001)
-#define <a class="reference internal" href="../api/keys/lifetimes.html#c.PSA_KEY_LIFETIME_VOLATILE" title="PSA_KEY_LIFETIME_VOLATILE">PSA_KEY_LIFETIME_VOLATILE</a> ((<a class="reference internal" href="../api/keys/lifetimes.html#c.psa_key_lifetime_t" title="psa_key_lifetime_t">psa_key_lifetime_t</a>) 0x00000000)
-#define <a class="reference internal" href="../api/keys/lifetimes.html#c.PSA_KEY_LOCATION_LOCAL_STORAGE" title="PSA_KEY_LOCATION_LOCAL_STORAGE">PSA_KEY_LOCATION_LOCAL_STORAGE</a> ((<a class="reference internal" href="../api/keys/lifetimes.html#c.psa_key_location_t" title="psa_key_location_t">psa_key_location_t</a>) 0x000000)
-#define <a class="reference internal" href="../api/keys/lifetimes.html#c.PSA_KEY_LOCATION_PRIMARY_SECURE_ELEMENT" title="PSA_KEY_LOCATION_PRIMARY_SECURE_ELEMENT">PSA_KEY_LOCATION_PRIMARY_SECURE_ELEMENT</a> ((<a class="reference internal" href="../api/keys/lifetimes.html#c.psa_key_location_t" title="psa_key_location_t">psa_key_location_t</a>) 0x000001)
-#define <a class="reference internal" href="../api/keys/lifetimes.html#c.PSA_KEY_PERSISTENCE_DEFAULT" title="PSA_KEY_PERSISTENCE_DEFAULT">PSA_KEY_PERSISTENCE_DEFAULT</a> ((<a class="reference internal" href="../api/keys/lifetimes.html#c.psa_key_persistence_t" title="psa_key_persistence_t">psa_key_persistence_t</a>) 0x01)
-#define <a class="reference internal" href="../api/keys/lifetimes.html#c.PSA_KEY_PERSISTENCE_READ_ONLY" title="PSA_KEY_PERSISTENCE_READ_ONLY">PSA_KEY_PERSISTENCE_READ_ONLY</a> ((<a class="reference internal" href="../api/keys/lifetimes.html#c.psa_key_persistence_t" title="psa_key_persistence_t">psa_key_persistence_t</a>) 0xff)
-#define <a class="reference internal" href="../api/keys/lifetimes.html#c.PSA_KEY_PERSISTENCE_VOLATILE" title="PSA_KEY_PERSISTENCE_VOLATILE">PSA_KEY_PERSISTENCE_VOLATILE</a> ((<a class="reference internal" href="../api/keys/lifetimes.html#c.psa_key_persistence_t" title="psa_key_persistence_t">psa_key_persistence_t</a>) 0x00)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_AES" title="PSA_KEY_TYPE_AES">PSA_KEY_TYPE_AES</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>)0x2400)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_ARC4" title="PSA_KEY_TYPE_ARC4">PSA_KEY_TYPE_ARC4</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>)0x2002)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_ARIA" title="PSA_KEY_TYPE_ARIA">PSA_KEY_TYPE_ARIA</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>)0x2406)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_CAMELLIA" title="PSA_KEY_TYPE_CAMELLIA">PSA_KEY_TYPE_CAMELLIA</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>)0x2403)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_CHACHA20" title="PSA_KEY_TYPE_CHACHA20">PSA_KEY_TYPE_CHACHA20</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>)0x2004)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_DERIVE" title="PSA_KEY_TYPE_DERIVE">PSA_KEY_TYPE_DERIVE</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>)0x1200)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_DES" title="PSA_KEY_TYPE_DES">PSA_KEY_TYPE_DES</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>)0x2301)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_DH_GET_FAMILY" title="PSA_KEY_TYPE_DH_GET_FAMILY">PSA_KEY_TYPE_DH_GET_FAMILY</a>(type) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_DH_KEY_PAIR" title="PSA_KEY_TYPE_DH_KEY_PAIR">PSA_KEY_TYPE_DH_KEY_PAIR</a>(group) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_DH_PUBLIC_KEY" title="PSA_KEY_TYPE_DH_PUBLIC_KEY">PSA_KEY_TYPE_DH_PUBLIC_KEY</a>(group) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_ECC_GET_FAMILY" title="PSA_KEY_TYPE_ECC_GET_FAMILY">PSA_KEY_TYPE_ECC_GET_FAMILY</a>(type) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_ECC_KEY_PAIR" title="PSA_KEY_TYPE_ECC_KEY_PAIR">PSA_KEY_TYPE_ECC_KEY_PAIR</a>(curve) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_ECC_PUBLIC_KEY" title="PSA_KEY_TYPE_ECC_PUBLIC_KEY">PSA_KEY_TYPE_ECC_PUBLIC_KEY</a>(curve) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_HMAC" title="PSA_KEY_TYPE_HMAC">PSA_KEY_TYPE_HMAC</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>)0x1100)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_ASYMMETRIC" title="PSA_KEY_TYPE_IS_ASYMMETRIC">PSA_KEY_TYPE_IS_ASYMMETRIC</a>(type) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_DH" title="PSA_KEY_TYPE_IS_DH">PSA_KEY_TYPE_IS_DH</a>(type) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_DH_KEY_PAIR" title="PSA_KEY_TYPE_IS_DH_KEY_PAIR">PSA_KEY_TYPE_IS_DH_KEY_PAIR</a>(type) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_DH_PUBLIC_KEY" title="PSA_KEY_TYPE_IS_DH_PUBLIC_KEY">PSA_KEY_TYPE_IS_DH_PUBLIC_KEY</a>(type) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_ECC" title="PSA_KEY_TYPE_IS_ECC">PSA_KEY_TYPE_IS_ECC</a>(type) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_ECC_KEY_PAIR" title="PSA_KEY_TYPE_IS_ECC_KEY_PAIR">PSA_KEY_TYPE_IS_ECC_KEY_PAIR</a>(type) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY" title="PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY">PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY</a>(type) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_KEY_PAIR" title="PSA_KEY_TYPE_IS_KEY_PAIR">PSA_KEY_TYPE_IS_KEY_PAIR</a>(type) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_PUBLIC_KEY" title="PSA_KEY_TYPE_IS_PUBLIC_KEY">PSA_KEY_TYPE_IS_PUBLIC_KEY</a>(type) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_RSA" title="PSA_KEY_TYPE_IS_RSA">PSA_KEY_TYPE_IS_RSA</a>(type) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_UNSTRUCTURED" title="PSA_KEY_TYPE_IS_UNSTRUCTURED">PSA_KEY_TYPE_IS_UNSTRUCTURED</a>(type) <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_KEY_PAIR_OF_PUBLIC_KEY" title="PSA_KEY_TYPE_KEY_PAIR_OF_PUBLIC_KEY">PSA_KEY_TYPE_KEY_PAIR_OF_PUBLIC_KEY</a>(type) \
- <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_NONE" title="PSA_KEY_TYPE_NONE">PSA_KEY_TYPE_NONE</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>)0x0000)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_PASSWORD" title="PSA_KEY_TYPE_PASSWORD">PSA_KEY_TYPE_PASSWORD</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>)0x1203)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_PASSWORD_HASH" title="PSA_KEY_TYPE_PASSWORD_HASH">PSA_KEY_TYPE_PASSWORD_HASH</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>)0x1205)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_PEPPER" title="PSA_KEY_TYPE_PEPPER">PSA_KEY_TYPE_PEPPER</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>)0x1206)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR" title="PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR</a>(type) \
- <em><a class="reference internal" href="../overview/implementation.html#specification-defined-value"><span class="std std-ref">/* specification-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_RAW_DATA" title="PSA_KEY_TYPE_RAW_DATA">PSA_KEY_TYPE_RAW_DATA</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>)0x1001)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_RSA_KEY_PAIR" title="PSA_KEY_TYPE_RSA_KEY_PAIR">PSA_KEY_TYPE_RSA_KEY_PAIR</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>)0x7001)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_RSA_PUBLIC_KEY" title="PSA_KEY_TYPE_RSA_PUBLIC_KEY">PSA_KEY_TYPE_RSA_PUBLIC_KEY</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>)0x4001)
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_SM4" title="PSA_KEY_TYPE_SM4">PSA_KEY_TYPE_SM4</a> ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>)0x2405)
-#define <a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_CACHE" title="PSA_KEY_USAGE_CACHE">PSA_KEY_USAGE_CACHE</a> ((<a class="reference internal" href="../api/keys/policy.html#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00000004)
-#define <a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_COPY" title="PSA_KEY_USAGE_COPY">PSA_KEY_USAGE_COPY</a> ((<a class="reference internal" href="../api/keys/policy.html#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00000002)
-#define <a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_DECRYPT" title="PSA_KEY_USAGE_DECRYPT">PSA_KEY_USAGE_DECRYPT</a> ((<a class="reference internal" href="../api/keys/policy.html#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00000200)
-#define <a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_DERIVE" title="PSA_KEY_USAGE_DERIVE">PSA_KEY_USAGE_DERIVE</a> ((<a class="reference internal" href="../api/keys/policy.html#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00004000)
-#define <a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_ENCRYPT" title="PSA_KEY_USAGE_ENCRYPT">PSA_KEY_USAGE_ENCRYPT</a> ((<a class="reference internal" href="../api/keys/policy.html#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00000100)
-#define <a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_EXPORT" title="PSA_KEY_USAGE_EXPORT">PSA_KEY_USAGE_EXPORT</a> ((<a class="reference internal" href="../api/keys/policy.html#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00000001)
-#define <a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_SIGN_HASH" title="PSA_KEY_USAGE_SIGN_HASH">PSA_KEY_USAGE_SIGN_HASH</a> ((<a class="reference internal" href="../api/keys/policy.html#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00001000)
-#define <a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_SIGN_MESSAGE" title="PSA_KEY_USAGE_SIGN_MESSAGE">PSA_KEY_USAGE_SIGN_MESSAGE</a> ((<a class="reference internal" href="../api/keys/policy.html#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00000400)
-#define <a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_VERIFY_DERIVATION" title="PSA_KEY_USAGE_VERIFY_DERIVATION">PSA_KEY_USAGE_VERIFY_DERIVATION</a> ((<a class="reference internal" href="../api/keys/policy.html#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00008000)
-#define <a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_VERIFY_HASH" title="PSA_KEY_USAGE_VERIFY_HASH">PSA_KEY_USAGE_VERIFY_HASH</a> ((<a class="reference internal" href="../api/keys/policy.html#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00002000)
-#define <a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_VERIFY_MESSAGE" title="PSA_KEY_USAGE_VERIFY_MESSAGE">PSA_KEY_USAGE_VERIFY_MESSAGE</a> ((<a class="reference internal" href="../api/keys/policy.html#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a>)0x00000800)
-#define <a class="reference internal" href="../api/ops/macs.html#c.PSA_MAC_LENGTH" title="PSA_MAC_LENGTH">PSA_MAC_LENGTH</a>(key_type, key_bits, alg) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/macs.html#c.PSA_MAC_MAX_SIZE" title="PSA_MAC_MAX_SIZE">PSA_MAC_MAX_SIZE</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/macs.html#c.PSA_MAC_OPERATION_INIT" title="PSA_MAC_OPERATION_INIT">PSA_MAC_OPERATION_INIT</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ka.html#c.PSA_RAW_KEY_AGREEMENT_OUTPUT_MAX_SIZE" title="PSA_RAW_KEY_AGREEMENT_OUTPUT_MAX_SIZE">PSA_RAW_KEY_AGREEMENT_OUTPUT_MAX_SIZE</a> \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/ka.html#c.PSA_RAW_KEY_AGREEMENT_OUTPUT_SIZE" title="PSA_RAW_KEY_AGREEMENT_OUTPUT_SIZE">PSA_RAW_KEY_AGREEMENT_OUTPUT_SIZE</a>(key_type, key_bits) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_SIGNATURE_MAX_SIZE" title="PSA_SIGNATURE_MAX_SIZE">PSA_SIGNATURE_MAX_SIZE</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_SIGN_OUTPUT_SIZE" title="PSA_SIGN_OUTPUT_SIZE">PSA_SIGN_OUTPUT_SIZE</a>(key_type, key_bits, alg) \
- <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-#define <a class="reference internal" href="../api/library/status.html#c.PSA_SUCCESS" title="PSA_SUCCESS">PSA_SUCCESS</a> ((<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a>)0)
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_TLS12_PSK_TO_MS_PSK_MAX_SIZE" title="PSA_TLS12_PSK_TO_MS_PSK_MAX_SIZE">PSA_TLS12_PSK_TO_MS_PSK_MAX_SIZE</a> <em><a class="reference internal" href="../overview/implementation.html#implementation-defined-value"><span class="std std-ref">/* implementation-defined value */</span></a></em>
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/aead.html#c.psa_aead_abort" title="psa_aead_abort">psa_aead_abort</a>(<a class="reference internal" href="../api/ops/aead.html#c.psa_aead_operation_t" title="psa_aead_operation_t">psa_aead_operation_t</a> * operation);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/aead.html#c.psa_aead_decrypt" title="psa_aead_decrypt">psa_aead_decrypt</a>(<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">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);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/aead.html#c.psa_aead_decrypt_setup" title="psa_aead_decrypt_setup">psa_aead_decrypt_setup</a>(<a class="reference internal" href="../api/ops/aead.html#c.psa_aead_operation_t" title="psa_aead_operation_t">psa_aead_operation_t</a> * operation,
- <a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/aead.html#c.psa_aead_encrypt" title="psa_aead_encrypt">psa_aead_encrypt</a>(<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">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);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/aead.html#c.psa_aead_encrypt_setup" title="psa_aead_encrypt_setup">psa_aead_encrypt_setup</a>(<a class="reference internal" href="../api/ops/aead.html#c.psa_aead_operation_t" title="psa_aead_operation_t">psa_aead_operation_t</a> * operation,
- <a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/aead.html#c.psa_aead_finish" title="psa_aead_finish">psa_aead_finish</a>(<a class="reference internal" href="../api/ops/aead.html#c.psa_aead_operation_t" title="psa_aead_operation_t">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);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/aead.html#c.psa_aead_generate_nonce" title="psa_aead_generate_nonce">psa_aead_generate_nonce</a>(<a class="reference internal" href="../api/ops/aead.html#c.psa_aead_operation_t" title="psa_aead_operation_t">psa_aead_operation_t</a> * operation,
- uint8_t * nonce,
- size_t nonce_size,
- size_t * nonce_length);
-<a class="reference internal" href="../api/ops/aead.html#c.psa_aead_operation_t" title="psa_aead_operation_t">psa_aead_operation_t</a> <a class="reference internal" href="../api/ops/aead.html#c.psa_aead_operation_init" title="psa_aead_operation_init">psa_aead_operation_init</a>(void);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/aead.html#c.psa_aead_set_lengths" title="psa_aead_set_lengths">psa_aead_set_lengths</a>(<a class="reference internal" href="../api/ops/aead.html#c.psa_aead_operation_t" title="psa_aead_operation_t">psa_aead_operation_t</a> * operation,
- size_t ad_length,
- size_t plaintext_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/aead.html#c.psa_aead_set_nonce" title="psa_aead_set_nonce">psa_aead_set_nonce</a>(<a class="reference internal" href="../api/ops/aead.html#c.psa_aead_operation_t" title="psa_aead_operation_t">psa_aead_operation_t</a> * operation,
- const uint8_t * nonce,
- size_t nonce_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/aead.html#c.psa_aead_update" title="psa_aead_update">psa_aead_update</a>(<a class="reference internal" href="../api/ops/aead.html#c.psa_aead_operation_t" title="psa_aead_operation_t">psa_aead_operation_t</a> * operation,
- const uint8_t * input,
- size_t input_length,
- uint8_t * output,
- size_t output_size,
- size_t * output_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/aead.html#c.psa_aead_update_ad" title="psa_aead_update_ad">psa_aead_update_ad</a>(<a class="reference internal" href="../api/ops/aead.html#c.psa_aead_operation_t" title="psa_aead_operation_t">psa_aead_operation_t</a> * operation,
- const uint8_t * input,
- size_t input_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/aead.html#c.psa_aead_verify" title="psa_aead_verify">psa_aead_verify</a>(<a class="reference internal" href="../api/ops/aead.html#c.psa_aead_operation_t" title="psa_aead_operation_t">psa_aead_operation_t</a> * operation,
- uint8_t * plaintext,
- size_t plaintext_size,
- size_t * plaintext_length,
- const uint8_t * tag,
- size_t tag_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/pke.html#c.psa_asymmetric_decrypt" title="psa_asymmetric_decrypt">psa_asymmetric_decrypt</a>(<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">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);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/pke.html#c.psa_asymmetric_encrypt" title="psa_asymmetric_encrypt">psa_asymmetric_encrypt</a>(<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">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);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_abort" title="psa_cipher_abort">psa_cipher_abort</a>(<a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_operation_t" title="psa_cipher_operation_t">psa_cipher_operation_t</a> * operation);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_decrypt" title="psa_cipher_decrypt">psa_cipher_decrypt</a>(<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg,
- const uint8_t * input,
- size_t input_length,
- uint8_t * output,
- size_t output_size,
- size_t * output_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_decrypt_setup" title="psa_cipher_decrypt_setup">psa_cipher_decrypt_setup</a>(<a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_operation_t" title="psa_cipher_operation_t">psa_cipher_operation_t</a> * operation,
- <a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_encrypt" title="psa_cipher_encrypt">psa_cipher_encrypt</a>(<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg,
- const uint8_t * input,
- size_t input_length,
- uint8_t * output,
- size_t output_size,
- size_t * output_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_encrypt_setup" title="psa_cipher_encrypt_setup">psa_cipher_encrypt_setup</a>(<a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_operation_t" title="psa_cipher_operation_t">psa_cipher_operation_t</a> * operation,
- <a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_finish" title="psa_cipher_finish">psa_cipher_finish</a>(<a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_operation_t" title="psa_cipher_operation_t">psa_cipher_operation_t</a> * operation,
- uint8_t * output,
- size_t output_size,
- size_t * output_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_generate_iv" title="psa_cipher_generate_iv">psa_cipher_generate_iv</a>(<a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_operation_t" title="psa_cipher_operation_t">psa_cipher_operation_t</a> * operation,
- uint8_t * iv,
- size_t iv_size,
- size_t * iv_length);
-<a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_operation_t" title="psa_cipher_operation_t">psa_cipher_operation_t</a> <a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_operation_init" title="psa_cipher_operation_init">psa_cipher_operation_init</a>(void);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_set_iv" title="psa_cipher_set_iv">psa_cipher_set_iv</a>(<a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_operation_t" title="psa_cipher_operation_t">psa_cipher_operation_t</a> * operation,
- const uint8_t * iv,
- size_t iv_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_update" title="psa_cipher_update">psa_cipher_update</a>(<a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_operation_t" title="psa_cipher_operation_t">psa_cipher_operation_t</a> * operation,
- const uint8_t * input,
- size_t input_length,
- uint8_t * output,
- size_t output_size,
- size_t * output_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/keys/management.html#c.psa_copy_key" title="psa_copy_key">psa_copy_key</a>(<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> source_key,
- const <a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes,
- <a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> * target_key);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/library/library.html#c.psa_crypto_init" title="psa_crypto_init">psa_crypto_init</a>(void);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/keys/management.html#c.psa_destroy_key" title="psa_destroy_key">psa_destroy_key</a>(<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/keys/management.html#c.psa_export_key" title="psa_export_key">psa_export_key</a>(<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- uint8_t * data,
- size_t data_size,
- size_t * data_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/keys/management.html#c.psa_export_public_key" title="psa_export_public_key">psa_export_public_key</a>(<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- uint8_t * data,
- size_t data_size,
- size_t * data_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/keys/management.html#c.psa_generate_key" title="psa_generate_key">psa_generate_key</a>(const <a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes,
- <a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> * key);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/rng.html#c.psa_generate_random" title="psa_generate_random">psa_generate_random</a>(uint8_t * output,
- size_t output_size);
-<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> <a class="reference internal" href="../api/keys/policy.html#c.psa_get_key_algorithm" title="psa_get_key_algorithm">psa_get_key_algorithm</a>(const <a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/keys/attributes.html#c.psa_get_key_attributes" title="psa_get_key_attributes">psa_get_key_attributes</a>(<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes);
-size_t <a class="reference internal" href="../api/keys/types.html#c.psa_get_key_bits" title="psa_get_key_bits">psa_get_key_bits</a>(const <a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes);
-<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> <a class="reference internal" href="../api/keys/ids.html#c.psa_get_key_id" title="psa_get_key_id">psa_get_key_id</a>(const <a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes);
-<a class="reference internal" href="../api/keys/lifetimes.html#c.psa_key_lifetime_t" title="psa_key_lifetime_t">psa_key_lifetime_t</a> <a class="reference internal" href="../api/keys/lifetimes.html#c.psa_get_key_lifetime" title="psa_get_key_lifetime">psa_get_key_lifetime</a>(const <a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes);
-<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a> <a class="reference internal" href="../api/keys/types.html#c.psa_get_key_type" title="psa_get_key_type">psa_get_key_type</a>(const <a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes);
-<a class="reference internal" href="../api/keys/policy.html#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a> <a class="reference internal" href="../api/keys/policy.html#c.psa_get_key_usage_flags" title="psa_get_key_usage_flags">psa_get_key_usage_flags</a>(const <a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_abort" title="psa_hash_abort">psa_hash_abort</a>(<a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_operation_t" title="psa_hash_operation_t">psa_hash_operation_t</a> * operation);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_clone" title="psa_hash_clone">psa_hash_clone</a>(const <a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_operation_t" title="psa_hash_operation_t">psa_hash_operation_t</a> * source_operation,
- <a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_operation_t" title="psa_hash_operation_t">psa_hash_operation_t</a> * target_operation);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_compare" title="psa_hash_compare">psa_hash_compare</a>(<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg,
- const uint8_t * input,
- size_t input_length,
- const uint8_t * hash,
- size_t hash_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_compute" title="psa_hash_compute">psa_hash_compute</a>(<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg,
- const uint8_t * input,
- size_t input_length,
- uint8_t * hash,
- size_t hash_size,
- size_t * hash_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_finish" title="psa_hash_finish">psa_hash_finish</a>(<a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_operation_t" title="psa_hash_operation_t">psa_hash_operation_t</a> * operation,
- uint8_t * hash,
- size_t hash_size,
- size_t * hash_length);
-<a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_operation_t" title="psa_hash_operation_t">psa_hash_operation_t</a> <a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_operation_init" title="psa_hash_operation_init">psa_hash_operation_init</a>(void);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_resume" title="psa_hash_resume">psa_hash_resume</a>(<a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_operation_t" title="psa_hash_operation_t">psa_hash_operation_t</a> * operation,
- const uint8_t * hash_state,
- size_t hash_state_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_setup" title="psa_hash_setup">psa_hash_setup</a>(<a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_operation_t" title="psa_hash_operation_t">psa_hash_operation_t</a> * operation,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_suspend" title="psa_hash_suspend">psa_hash_suspend</a>(<a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_operation_t" title="psa_hash_operation_t">psa_hash_operation_t</a> * operation,
- uint8_t * hash_state,
- size_t hash_state_size,
- size_t * hash_state_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_update" title="psa_hash_update">psa_hash_update</a>(<a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_operation_t" title="psa_hash_operation_t">psa_hash_operation_t</a> * operation,
- const uint8_t * input,
- size_t input_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_verify" title="psa_hash_verify">psa_hash_verify</a>(<a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_operation_t" title="psa_hash_operation_t">psa_hash_operation_t</a> * operation,
- const uint8_t * hash,
- size_t hash_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/keys/management.html#c.psa_import_key" title="psa_import_key">psa_import_key</a>(const <a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes,
- const uint8_t * data,
- size_t data_length,
- <a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> * key);
-<a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> <a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_init" title="psa_key_attributes_init">psa_key_attributes_init</a>(void);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_abort" title="psa_key_derivation_abort">psa_key_derivation_abort</a>(<a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_operation_t" title="psa_key_derivation_operation_t">psa_key_derivation_operation_t</a> * operation);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_get_capacity" title="psa_key_derivation_get_capacity">psa_key_derivation_get_capacity</a>(const <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_operation_t" title="psa_key_derivation_operation_t">psa_key_derivation_operation_t</a> * operation,
- size_t * capacity);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_input_bytes" title="psa_key_derivation_input_bytes">psa_key_derivation_input_bytes</a>(<a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_operation_t" title="psa_key_derivation_operation_t">psa_key_derivation_operation_t</a> * operation,
- <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_step_t" title="psa_key_derivation_step_t">psa_key_derivation_step_t</a> step,
- const uint8_t * data,
- size_t data_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_input_integer" title="psa_key_derivation_input_integer">psa_key_derivation_input_integer</a>(<a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_operation_t" title="psa_key_derivation_operation_t">psa_key_derivation_operation_t</a> * operation,
- <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_step_t" title="psa_key_derivation_step_t">psa_key_derivation_step_t</a> step,
- uint64_t value);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_input_key" title="psa_key_derivation_input_key">psa_key_derivation_input_key</a>(<a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_operation_t" title="psa_key_derivation_operation_t">psa_key_derivation_operation_t</a> * operation,
- <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_step_t" title="psa_key_derivation_step_t">psa_key_derivation_step_t</a> step,
- <a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/ka.html#c.psa_key_derivation_key_agreement" title="psa_key_derivation_key_agreement">psa_key_derivation_key_agreement</a>(<a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_operation_t" title="psa_key_derivation_operation_t">psa_key_derivation_operation_t</a> * operation,
- <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_step_t" title="psa_key_derivation_step_t">psa_key_derivation_step_t</a> step,
- <a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> private_key,
- const uint8_t * peer_key,
- size_t peer_key_length);
-<a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_operation_t" title="psa_key_derivation_operation_t">psa_key_derivation_operation_t</a> <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_operation_init" title="psa_key_derivation_operation_init">psa_key_derivation_operation_init</a>(void);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_output_bytes" title="psa_key_derivation_output_bytes">psa_key_derivation_output_bytes</a>(<a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_operation_t" title="psa_key_derivation_operation_t">psa_key_derivation_operation_t</a> * operation,
- uint8_t * output,
- size_t output_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_output_key" title="psa_key_derivation_output_key">psa_key_derivation_output_key</a>(const <a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes,
- <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_operation_t" title="psa_key_derivation_operation_t">psa_key_derivation_operation_t</a> * operation,
- <a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> * key);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_set_capacity" title="psa_key_derivation_set_capacity">psa_key_derivation_set_capacity</a>(<a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_operation_t" title="psa_key_derivation_operation_t">psa_key_derivation_operation_t</a> * operation,
- size_t capacity);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_setup" title="psa_key_derivation_setup">psa_key_derivation_setup</a>(<a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_operation_t" title="psa_key_derivation_operation_t">psa_key_derivation_operation_t</a> * operation,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_verify_bytes" title="psa_key_derivation_verify_bytes">psa_key_derivation_verify_bytes</a>(<a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_operation_t" title="psa_key_derivation_operation_t">psa_key_derivation_operation_t</a> * operation,
- const uint8_t *expected_output,
- size_t output_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_verify_key" title="psa_key_derivation_verify_key">psa_key_derivation_verify_key</a>(<a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_operation_t" title="psa_key_derivation_operation_t">psa_key_derivation_operation_t</a> * operation,
- <a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> expected);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/macs.html#c.psa_mac_abort" title="psa_mac_abort">psa_mac_abort</a>(<a class="reference internal" href="../api/ops/macs.html#c.psa_mac_operation_t" title="psa_mac_operation_t">psa_mac_operation_t</a> * operation);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/macs.html#c.psa_mac_compute" title="psa_mac_compute">psa_mac_compute</a>(<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg,
- const uint8_t * input,
- size_t input_length,
- uint8_t * mac,
- size_t mac_size,
- size_t * mac_length);
-<a class="reference internal" href="../api/ops/macs.html#c.psa_mac_operation_t" title="psa_mac_operation_t">psa_mac_operation_t</a> <a class="reference internal" href="../api/ops/macs.html#c.psa_mac_operation_init" title="psa_mac_operation_init">psa_mac_operation_init</a>(void);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/macs.html#c.psa_mac_sign_finish" title="psa_mac_sign_finish">psa_mac_sign_finish</a>(<a class="reference internal" href="../api/ops/macs.html#c.psa_mac_operation_t" title="psa_mac_operation_t">psa_mac_operation_t</a> * operation,
- uint8_t * mac,
- size_t mac_size,
- size_t * mac_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/macs.html#c.psa_mac_sign_setup" title="psa_mac_sign_setup">psa_mac_sign_setup</a>(<a class="reference internal" href="../api/ops/macs.html#c.psa_mac_operation_t" title="psa_mac_operation_t">psa_mac_operation_t</a> * operation,
- <a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/macs.html#c.psa_mac_update" title="psa_mac_update">psa_mac_update</a>(<a class="reference internal" href="../api/ops/macs.html#c.psa_mac_operation_t" title="psa_mac_operation_t">psa_mac_operation_t</a> * operation,
- const uint8_t * input,
- size_t input_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/macs.html#c.psa_mac_verify" title="psa_mac_verify">psa_mac_verify</a>(<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg,
- const uint8_t * input,
- size_t input_length,
- const uint8_t * mac,
- size_t mac_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/macs.html#c.psa_mac_verify_finish" title="psa_mac_verify_finish">psa_mac_verify_finish</a>(<a class="reference internal" href="../api/ops/macs.html#c.psa_mac_operation_t" title="psa_mac_operation_t">psa_mac_operation_t</a> * operation,
- const uint8_t * mac,
- size_t mac_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/macs.html#c.psa_mac_verify_setup" title="psa_mac_verify_setup">psa_mac_verify_setup</a>(<a class="reference internal" href="../api/ops/macs.html#c.psa_mac_operation_t" title="psa_mac_operation_t">psa_mac_operation_t</a> * operation,
- <a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/keys/management.html#c.psa_purge_key" title="psa_purge_key">psa_purge_key</a>(<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/ka.html#c.psa_raw_key_agreement" title="psa_raw_key_agreement">psa_raw_key_agreement</a>(<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg,
- <a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_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);
-void <a class="reference internal" href="../api/keys/attributes.html#c.psa_reset_key_attributes" title="psa_reset_key_attributes">psa_reset_key_attributes</a>(<a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes);
-void <a class="reference internal" href="../api/keys/policy.html#c.psa_set_key_algorithm" title="psa_set_key_algorithm">psa_set_key_algorithm</a>(<a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg);
-void <a class="reference internal" href="../api/keys/types.html#c.psa_set_key_bits" title="psa_set_key_bits">psa_set_key_bits</a>(<a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes,
- size_t bits);
-void <a class="reference internal" href="../api/keys/ids.html#c.psa_set_key_id" title="psa_set_key_id">psa_set_key_id</a>(<a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes,
- <a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> id);
-void <a class="reference internal" href="../api/keys/lifetimes.html#c.psa_set_key_lifetime" title="psa_set_key_lifetime">psa_set_key_lifetime</a>(<a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes,
- <a class="reference internal" href="../api/keys/lifetimes.html#c.psa_key_lifetime_t" title="psa_key_lifetime_t">psa_key_lifetime_t</a> lifetime);
-void <a class="reference internal" href="../api/keys/types.html#c.psa_set_key_type" title="psa_set_key_type">psa_set_key_type</a>(<a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes,
- <a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a> type);
-void <a class="reference internal" href="../api/keys/policy.html#c.psa_set_key_usage_flags" title="psa_set_key_usage_flags">psa_set_key_usage_flags</a>(<a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t">psa_key_attributes_t</a> * attributes,
- <a class="reference internal" href="../api/keys/policy.html#c.psa_key_usage_t" title="psa_key_usage_t">psa_key_usage_t</a> usage_flags);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/sign.html#c.psa_sign_hash" title="psa_sign_hash">psa_sign_hash</a>(<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg,
- const uint8_t * hash,
- size_t hash_length,
- uint8_t * signature,
- size_t signature_size,
- size_t * signature_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/sign.html#c.psa_sign_message" title="psa_sign_message">psa_sign_message</a>(<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg,
- const uint8_t * input,
- size_t input_length,
- uint8_t * signature,
- size_t signature_size,
- size_t * signature_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/sign.html#c.psa_verify_hash" title="psa_verify_hash">psa_verify_hash</a>(<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg,
- const uint8_t * hash,
- size_t hash_length,
- const uint8_t * signature,
- size_t signature_length);
-<a class="reference internal" href="../api/library/status.html#c.psa_status_t" title="psa_status_t">psa_status_t</a> <a class="reference internal" href="../api/ops/sign.html#c.psa_verify_message" title="psa_verify_message">psa_verify_message</a>(<a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t">psa_key_id_t</a> key,
- <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a> alg,
- const uint8_t * input,
- size_t input_length,
- const uint8_t * signature,
- size_t signature_length);
-
-</pre>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper"><h3><a href="../index.html"><b>PSA Crypto API</b></a></h3>
-IHI 0086<br/>
-Non-confidential<br/>
-Version 1.1.0
-<span style="color: red; font-weight: bold;"></span>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="../about.html">About this document</a></li>
-</ul>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="../overview/intro.html">1. Introduction</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/goals.html">2. Design goals</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/functionality.html">3. Functionality overview</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/sample-arch.html">4. Sample architectures</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/conventions.html">5. Library conventions</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/implementation.html">6. Implementation considerations</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/usage.html">7. Usage considerations</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api/library/index.html">8. Library management reference</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api/keys/index.html">9. Key management reference</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api/ops/index.html">10. Cryptographic operation reference</a></li>
-</ul>
-<ul class="current">
-<li class="toctree-l1 current"><a class="current reference internal" href="#">Example header file</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#psa-crypto-h">psa/crypto.h</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="encodings.html">Algorithm and key type encoding</a></li>
-<li class="toctree-l1"><a class="reference internal" href="specdef_values.html">Example macro implementations</a></li>
-<li class="toctree-l1"><a class="reference internal" href="sra.html">Security Risk Assessment</a></li>
-<li class="toctree-l1"><a class="reference internal" href="history.html">Changes to the API</a></li>
-</ul>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="../psa_c-identifiers.html">Index of API elements</a></li>
-</ul>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="footer">
- © 2018-2022, Arm Limited or its affiliates. All rights reserved.
-
- |
- Powered by <a href="http://sphinx-doc.org/">Sphinx 1.6.7</a>
- & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
-
- </div>
-
-
-
-
- </body>
-</html>
\ No newline at end of file
+<meta http-equiv="Refresh" content="0; url='https://arm-software.github.io/psa-api/crypto/1.1/appendix/example_header.html'" />
diff --git a/docs/1.1.0/html/appendix/history.html b/docs/1.1.0/html/appendix/history.html
index e4d6e21..3dd7291 100644
--- a/docs/1.1.0/html/appendix/history.html
+++ b/docs/1.1.0/html/appendix/history.html
@@ -1,797 +1 @@
-
-<!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/html; charset=utf-8" />
- <title>Changes to the API — PSA Crypto API 1.1.0 documentation</title>
- <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '1.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: false,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="author" title="About these documents" href="../about.html" />
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="prev" title="Security Risk Assessment" href="sra.html" />
-
- <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
-
- <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
- </head>
- <body>
-
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="changes-to-the-api">
-<h1>Changes to the API</h1>
-<div class="section" id="document-change-history">
-<span id="changes"></span><h2>Document change history</h2>
-<p>This section provides the detailed changes made between published version of the document.</p>
-<div class="section" id="changes-between-1-0-1-and-1-1-0">
-<h3>Changes between <em>1.0.1</em> and <em>1.1.0</em></h3>
-<div class="section" id="id1">
-<h4>Changes to the API</h4>
-<ul class="simple">
-<li>Relaxation when a raw key agreement is used as a key’s permitted algorithm policy. This now also permits the key agreement to be combined with any key derivation algorithm. See <a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_FFDH" title="PSA_ALG_FFDH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_FFDH</span></code></a> and <a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_ECDH" title="PSA_ALG_ECDH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_ECDH</span></code></a>.</li>
-<li>Provide wildcard permitted-algorithm polices for MAC and AEAD that can specify a minimum MAC or tag length. The following elements are added to the API:<ul>
-<li><a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_AT_LEAST_THIS_LENGTH_MAC" title="PSA_ALG_AT_LEAST_THIS_LENGTH_MAC"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_AT_LEAST_THIS_LENGTH_MAC()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG" title="PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG()</span></code></a></li>
-</ul>
-</li>
-<li>Added support for password-hashing and key-stretching algorithms, as key derivation operations.<ul>
-<li>Added key types <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_PASSWORD" title="PSA_KEY_TYPE_PASSWORD"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_PASSWORD</span></code></a>, <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_PASSWORD_HASH" title="PSA_KEY_TYPE_PASSWORD_HASH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_PASSWORD_HASH</span></code></a> and <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_PEPPER" title="PSA_KEY_TYPE_PEPPER"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_PEPPER</span></code></a>, to support use of these new types of algorithm.</li>
-<li>Add key derivation input steps <a class="reference internal" href="../api/ops/kdf.html#c.PSA_KEY_DERIVATION_INPUT_PASSWORD" title="PSA_KEY_DERIVATION_INPUT_PASSWORD"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_DERIVATION_INPUT_PASSWORD</span></code></a> and <a class="reference internal" href="../api/ops/kdf.html#c.PSA_KEY_DERIVATION_INPUT_COST" title="PSA_KEY_DERIVATION_INPUT_COST"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_DERIVATION_INPUT_COST</span></code></a>.</li>
-<li>Added <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_input_integer" title="psa_key_derivation_input_integer"><code class="xref any c c-func docutils literal"><span class="pre">psa_key_derivation_input_integer()</span></code></a> to support numerical inputs to a key derivation operation.</li>
-<li>Added functions <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_verify_bytes" title="psa_key_derivation_verify_bytes"><code class="xref any c c-func docutils literal"><span class="pre">psa_key_derivation_verify_bytes()</span></code></a> and <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_verify_key" title="psa_key_derivation_verify_key"><code class="xref any c c-func docutils literal"><span class="pre">psa_key_derivation_verify_key()</span></code></a> to compare derivation output data within the cryptoprocessor.</li>
-<li>Added usage flag <a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_VERIFY_DERIVATION" title="PSA_KEY_USAGE_VERIFY_DERIVATION"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_USAGE_VERIFY_DERIVATION</span></code></a> for using keys with the new verification functions.</li>
-<li>Modified the description of existing key derivation APIs to enable the use of key derivation functionality.</li>
-</ul>
-</li>
-<li>Added algorithms <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_PBKDF2_HMAC" title="PSA_ALG_PBKDF2_HMAC"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_PBKDF2_HMAC()</span></code></a> and <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_PBKDF2_AES_CMAC_PRF_128" title="PSA_ALG_PBKDF2_AES_CMAC_PRF_128"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_PBKDF2_AES_CMAC_PRF_128</span></code></a> to implement the PBKDF2 password-hashing algorithm.</li>
-<li>Add support for twisted Edwards Elliptic curve keys, and the associated EdDSA signature algorithms. The following elements are added to the API:<ul>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_TWISTED_EDWARDS" title="PSA_ECC_FAMILY_TWISTED_EDWARDS"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_TWISTED_EDWARDS</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_PURE_EDDSA" title="PSA_ALG_PURE_EDDSA"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_PURE_EDDSA</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ED25519PH" title="PSA_ALG_ED25519PH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_ED25519PH</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ED448PH" title="PSA_ALG_ED448PH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_ED448PH</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHAKE256_512" title="PSA_ALG_SHAKE256_512"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHAKE256_512</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_HASH_EDDSA" title="PSA_ALG_IS_HASH_EDDSA"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_HASH_EDDSA()</span></code></a></li>
-</ul>
-</li>
-<li>Added an identifier for <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_ARIA" title="PSA_KEY_TYPE_ARIA"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_ARIA</span></code></a>.</li>
-<li>Added <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PSS_ANY_SALT" title="PSA_ALG_RSA_PSS_ANY_SALT"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_RSA_PSS_ANY_SALT()</span></code></a>, which creates the same signatures as <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PSS" title="PSA_ALG_RSA_PSS"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_RSA_PSS()</span></code></a>, but permits any salt length when verifying a signature. Also added the helper macros <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_RSA_PSS_ANY_SALT" title="PSA_ALG_IS_RSA_PSS_ANY_SALT"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_RSA_PSS_ANY_SALT()</span></code></a> and <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_RSA_PSS_STANDARD_SALT" title="PSA_ALG_IS_RSA_PSS_STANDARD_SALT"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_RSA_PSS_STANDARD_SALT()</span></code></a>, and extended <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_RSA_PSS" title="PSA_ALG_IS_RSA_PSS"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_RSA_PSS()</span></code></a> to detect both variants of the RSA-PSS algorithm.</li>
-</ul>
-</div>
-<div class="section" id="clarifications-and-fixes">
-<h4>Clarifications and fixes</h4>
-<ul class="simple">
-<li>Described the use of header files and the general API conventions. See <a class="reference internal" href="../overview/conventions.html#library-conventions"><span class="secref">Library conventions</span></a>.</li>
-<li>Added details for SHA-512/224 to the hash suspend state. See <a class="reference internal" href="../api/ops/hashes.html#hash-suspend-state"><span class="secref">Hash suspend state</span></a>.</li>
-<li>Removed ambiguities from support macros that provide buffer sizes, and improved consistency of parameter domain definition.</li>
-<li>Clarified the length of salt used for creating <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PSS" title="PSA_ALG_RSA_PSS"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_RSA_PSS()</span></code></a> signatures, and that verification requires the same length of salt in the signature.</li>
-<li>Documented the use of <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_INVALID_ARGUMENT" title="PSA_ERROR_INVALID_ARGUMENT"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ERROR_INVALID_ARGUMENT</span></code></a> when the input data to an operation exceeds the limit specified by the algorithm.</li>
-<li>Clarified how the <a class="reference internal" href="../api/ops/pke.html#c.PSA_ALG_RSA_OAEP" title="PSA_ALG_RSA_OAEP"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_RSA_OAEP()</span></code></a> algorithm uses the hash algorithm parameter.</li>
-<li>Fixed error in <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_setup" title="psa_key_derivation_setup"><code class="xref any c c-func docutils literal"><span class="pre">psa_key_derivation_setup()</span></code></a> documentation: combined key agreement and key derivation algorithms are valid for this API.</li>
-<li>Added and clarified documentation for error conditions across the API.</li>
-<li>Clarified the distinction between <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_HASH_AND_SIGN" title="PSA_ALG_IS_HASH_AND_SIGN"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_HASH_AND_SIGN()</span></code></a> and <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_SIGN_HASH" title="PSA_ALG_IS_SIGN_HASH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_SIGN_HASH()</span></code></a>.</li>
-<li>Clarified the behavior of <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_HASH_AND_SIGN" title="PSA_ALG_IS_HASH_AND_SIGN"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_HASH_AND_SIGN()</span></code></a> with a wildcard algorithm policy parameter.</li>
-<li>Documented the use of <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PKCS1V15_SIGN_RAW" title="PSA_ALG_RSA_PKCS1V15_SIGN_RAW"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_RSA_PKCS1V15_SIGN_RAW</span></code></a> with the <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PKCS1V15_SIGN" title="PSA_ALG_RSA_PKCS1V15_SIGN"><code class="docutils literal"><span class="pre">PSA_ALG_RSA_PKCS1V15_SIGN</span></code></a><code class="docutils literal"><span class="pre">(</span></code><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ANY_HASH" title="PSA_ALG_ANY_HASH"><code class="docutils literal"><span class="pre">PSA_ALG_ANY_HASH</span></code></a><code class="docutils literal"><span class="pre">)</span></code> wildcard policy.</li>
-<li>Clarified the way that <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_CCM" title="PSA_ALG_CCM"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_CCM</span></code></a> determines the value of the CCM configuration parameter <em>L</em>. Clarified that nonces generated by <a class="reference internal" href="../api/ops/aead.html#c.psa_aead_generate_nonce" title="psa_aead_generate_nonce"><code class="xref any c c-func docutils literal"><span class="pre">psa_aead_generate_nonce()</span></code></a> can be shorter than the default nonce length provided by <a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_NONCE_LENGTH" title="PSA_AEAD_NONCE_LENGTH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_AEAD_NONCE_LENGTH()</span></code></a>.</li>
-</ul>
-</div>
-<div class="section" id="other-changes">
-<h4>Other changes</h4>
-<ul class="simple">
-<li>Add new appendix describing the encoding of algorithm identifiers and key types. See <a class="reference internal" href="encodings.html#appendix-encodings"><span class="secref">Algorithm and key type encoding</span></a>.</li>
-<li>Migrated cryptographic operation summaries to the start of the appropriate operation section, and out of the <a class="reference internal" href="../overview/functionality.html#functionality-overview"><span class="secref">Functionality overview</span></a>.</li>
-<li>Included a Security Risk Assessment for the PSA Cryptography API.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="changes-between-1-0-0-and-1-0-1">
-<h3>Changes between <em>1.0.0</em> and <em>1.0.1</em></h3>
-<div class="section" id="id2">
-<h4>Changes to the API</h4>
-<ul class="simple">
-<li>Added subtypes <a class="reference internal" href="../api/keys/lifetimes.html#c.psa_key_persistence_t" title="psa_key_persistence_t"><code class="xref any c c-type docutils literal"><span class="pre">psa_key_persistence_t</span></code></a> and <a class="reference internal" href="../api/keys/lifetimes.html#c.psa_key_location_t" title="psa_key_location_t"><code class="xref any c c-type docutils literal"><span class="pre">psa_key_location_t</span></code></a> for key lifetimes, and defined standard values for these attributes.</li>
-<li>Added identifiers for <a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SM3" title="PSA_ALG_SM3"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SM3</span></code></a> and <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_SM4" title="PSA_KEY_TYPE_SM4"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_SM4</span></code></a>.</li>
-</ul>
-</div>
-<div class="section" id="id3">
-<h4>Clarifications and fixes</h4>
-<ul class="simple">
-<li>Provided citation references for all cryptographic algorithms in the specification.</li>
-<li>Provided precise key size information for all key types.</li>
-<li>Permitted implementations to store and export long HMAC keys in hashed form.</li>
-<li>Provided details for initialization vectors in all unauthenticated cipher algorithms.</li>
-<li>Provided details for nonces in all AEAD algorithms.</li>
-<li>Clarified the input steps for HKDF.</li>
-<li>Provided details of signature algorithms, include requirements when using with <a class="reference internal" href="../api/ops/sign.html#c.psa_sign_hash" title="psa_sign_hash"><code class="xref any c c-func docutils literal"><span class="pre">psa_sign_hash()</span></code></a> and <a class="reference internal" href="../api/ops/sign.html#c.psa_verify_hash" title="psa_verify_hash"><code class="xref any c c-func docutils literal"><span class="pre">psa_verify_hash()</span></code></a>.</li>
-<li>Provided details of key agreement algorithms, and how to use them.</li>
-<li>Aligned terminology relating to key policies, to clarify the combination of the usage flags and permitted algorithm in the policy.</li>
-<li>Clarified the use of the individual key attributes for all of the key creation functions.</li>
-<li>Restructured the description for <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_output_key" title="psa_key_derivation_output_key"><code class="xref any c c-func docutils literal"><span class="pre">psa_key_derivation_output_key()</span></code></a>, to clarify the handling of the excess bits in ECC key generation when needing a string of bits whose length is not a multiple of <code class="docutils literal"><span class="pre">8</span></code>.</li>
-<li>Referenced the correct buffer size macros for <a class="reference internal" href="../api/keys/management.html#c.psa_export_key" title="psa_export_key"><code class="xref any c c-func docutils literal"><span class="pre">psa_export_key()</span></code></a>.</li>
-<li>Removed the use of the <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_DOES_NOT_EXIST" title="PSA_ERROR_DOES_NOT_EXIST"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ERROR_DOES_NOT_EXIST</span></code></a> error.</li>
-<li>Clarified concurrency rules.</li>
-<li>Document that <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_output_key" title="psa_key_derivation_output_key"><code class="xref any c c-func docutils literal"><span class="pre">psa_key_derivation_output_key()</span></code></a> does not return <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_NOT_PERMITTED" title="PSA_ERROR_NOT_PERMITTED"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ERROR_NOT_PERMITTED</span></code></a> if the secret input is the result of a key agreement. This matches what was already documented for <a class="reference internal" href="../api/ops/kdf.html#c.PSA_KEY_DERIVATION_INPUT_SECRET" title="PSA_KEY_DERIVATION_INPUT_SECRET"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_DERIVATION_INPUT_SECRET</span></code></a>.</li>
-<li>Relax the requirement to use the defined key derivation methods in <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_output_key" title="psa_key_derivation_output_key"><code class="xref any c c-func docutils literal"><span class="pre">psa_key_derivation_output_key()</span></code></a>: implementation-specific KDF algorithms can use implementation-defined methods to derive the key material.</li>
-</ul>
-</div>
-<div class="section" id="id4">
-<h4>Other changes</h4>
-<ul class="simple">
-<li>Provided a glossary of terms.</li>
-<li>Provided a table of references.</li>
-<li>Restructured the <a class="reference internal" href="../api/keys/index.html#key-management"><span class="secref">Key management reference</span></a> chapter.<ul>
-<li>Moved individual attribute types, values and accessor functions into their own sections.</li>
-<li>Placed permitted algorithms and usage flags into <a class="reference internal" href="../api/keys/policy.html#key-policy"><span class="secref">Key policies</span></a>.</li>
-<li>Moved most introductory material from the <a class="reference internal" href="../overview/functionality.html#functionality-overview"><span class="secref">Functionality overview</span></a> into the relevant API sections.</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<div class="section" id="changes-between-1-0-beta-3-and-1-0-0">
-<h3>Changes between <em>1.0 beta 3</em> and <em>1.0.0</em></h3>
-<div class="section" id="id5">
-<h4>Changes to the API</h4>
-<ul>
-<li><p class="first">Added <a class="reference internal" href="../api/library/library.html#c.PSA_CRYPTO_API_VERSION_MAJOR" title="PSA_CRYPTO_API_VERSION_MAJOR"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_CRYPTO_API_VERSION_MAJOR</span></code></a> and <a class="reference internal" href="../api/library/library.html#c.PSA_CRYPTO_API_VERSION_MINOR" title="PSA_CRYPTO_API_VERSION_MINOR"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_CRYPTO_API_VERSION_MINOR</span></code></a> to report the PSA Crypto API version.</p>
-</li>
-<li><p class="first">Removed <code class="docutils literal"><span class="pre">PSA_ALG_GMAC</span></code> algorithm identifier.</p>
-</li>
-<li><p class="first">Removed internal implementation macros from the API specification:</p>
-<ul class="simple">
-<li><code class="docutils literal"><span class="pre">PSA_AEAD_TAG_LENGTH_OFFSET</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_AEAD_FROM_BLOCK_FLAG</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_AEAD_TAG_LENGTH_MASK</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_CATEGORY_AEAD</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_CATEGORY_CIPHER</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_CATEGORY_HASH</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_CATEGORY_KEY_AGREEMENT</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_CATEGORY_KEY_DERIVATION</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_CATEGORY_MAC</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_CATEGORY_MASK</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_CATEGORY_SIGN</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_CIPHER_FROM_BLOCK_FLAG</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_CIPHER_MAC_BASE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_CIPHER_STREAM_FLAG</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_DETERMINISTIC_ECDSA_BASE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_ECDSA_BASE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_ECDSA_IS_DETERMINISTIC</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_HASH_MASK</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_HKDF_BASE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_HMAC_BASE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_IS_KEY_DERIVATION_OR_AGREEMENT</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_IS_VENDOR_DEFINED</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_KEY_AGREEMENT_MASK</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_KEY_DERIVATION_MASK</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_MAC_SUBCATEGORY_MASK</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_MAC_TRUNCATION_MASK</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_RSA_OAEP_BASE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_RSA_PKCS1V15_SIGN_BASE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_RSA_PSS_BASE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_TLS12_PRF_BASE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_TLS12_PSK_TO_MS_BASE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_VENDOR_FLAG</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_BITS_TO_BYTES</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_BYTES_TO_BITS</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECDSA_SIGNATURE_SIZE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_HMAC_MAX_HASH_BLOCK_SIZE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_EXPORT_DSA_KEY_PAIR_MAX_SIZE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_EXPORT_DSA_PUBLIC_KEY_MAX_SIZE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_EXPORT_ECC_KEY_PAIR_MAX_SIZE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_EXPORT_RSA_KEY_PAIR_MAX_SIZE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_EXPORT_RSA_PUBLIC_KEY_MAX_SIZE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_CATEGORY_FLAG_PAIR</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_CATEGORY_KEY_PAIR</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_CATEGORY_MASK</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_CATEGORY_RAW</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_CATEGORY_SYMMETRIC</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_DH_GROUP_MASK</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_DH_KEY_PAIR_BASE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_DH_PUBLIC_KEY_BASE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_ECC_CURVE_MASK</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_ECC_KEY_PAIR_BASE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_IS_VENDOR_DEFINED</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_VENDOR_FLAG</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_MAC_TRUNCATED_LENGTH</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_MAC_TRUNCATION_OFFSET</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ROUND_UP_TO_MULTIPLE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_RSA_MINIMUM_PADDING_SIZE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_VENDOR_ECC_MAX_CURVE_BITS</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_VENDOR_RSA_MAX_KEY_BITS</span></code></li>
-</ul>
-</li>
-<li><p class="first">Remove the definition of implementation-defined macros from the specification, and clarified the implementation requirements for these macros in <a class="reference internal" href="../overview/implementation.html#implementation-specific-macro"><span class="secref">Implementation-specific macros</span></a>.</p>
-<ul class="simple">
-<li>Macros with implementation-defined values are indicated by <code class="docutils literal"><span class="pre">/*</span> <span class="pre">implementation-defined</span> <span class="pre">value</span> <span class="pre">*/</span></code> in the API prototype.
-The implementation must provide the implementation.</li>
-<li>Macros for algorithm and key type construction and inspection have specification-defined values.
-This is indicated by <code class="docutils literal"><span class="pre">/*</span> <span class="pre">specification-defined</span> <span class="pre">value</span> <span class="pre">*/</span></code> in the API prototype.
-Example definitions of these macros is provided in <a class="reference internal" href="specdef_values.html#appendix-specdef-values"><span class="secref">Example macro implementations</span></a>.</li>
-</ul>
-</li>
-<li><p class="first">Changed the semantics of multi-part operations.</p>
-<ul class="simple">
-<li>Formalize the standard pattern for multi-part operations.</li>
-<li>Require all errors to result in an error state, requiring a call to <code class="docutils literal"><span class="pre">psa_xxx_abort()</span></code> to reset the object.</li>
-<li>Define behavior in illegal and impossible operation states, and for copying and reusing operation objects.</li>
-</ul>
-<p>Although the API signatures have not changed, this change requires modifications to application flows that handle error conditions in multi-part operations.</p>
-</li>
-<li><p class="first">Merge the key identifier and key handle concepts in the API.</p>
-<ul class="simple">
-<li>Replaced all references to key handles with key identifiers, or something similar.</li>
-<li>Replaced all uses of <code class="docutils literal"><span class="pre">psa_key_handle_t</span></code> with <a class="reference internal" href="../api/keys/ids.html#c.psa_key_id_t" title="psa_key_id_t"><code class="xref any c c-type docutils literal"><span class="pre">psa_key_id_t</span></code></a> in the API, and removes the <code class="docutils literal"><span class="pre">psa_key_handle_t</span></code> type.</li>
-<li>Removed <code class="docutils literal"><span class="pre">psa_open_key</span></code> and <code class="docutils literal"><span class="pre">psa_close_key</span></code>.</li>
-<li>Added <a class="reference internal" href="../api/keys/ids.html#c.PSA_KEY_ID_NULL" title="PSA_KEY_ID_NULL"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_ID_NULL</span></code></a> for the never valid zero key identifier.</li>
-<li>Document rules related to destroying keys whilst in use.</li>
-<li>Added the <a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_CACHE" title="PSA_KEY_USAGE_CACHE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_USAGE_CACHE</span></code></a> usage flag and the related <a class="reference internal" href="../api/keys/management.html#c.psa_purge_key" title="psa_purge_key"><code class="xref any c c-func docutils literal"><span class="pre">psa_purge_key()</span></code></a> API.</li>
-<li>Added clarification about caching keys to non-volatile memory.</li>
-</ul>
-</li>
-<li><p class="first">Renamed <code class="docutils literal"><span class="pre">PSA_ALG_TLS12_PSK_TO_MS_MAX_PSK_LEN</span></code> to <a class="reference internal" href="../api/ops/kdf.html#c.PSA_TLS12_PSK_TO_MS_PSK_MAX_SIZE" title="PSA_TLS12_PSK_TO_MS_PSK_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_TLS12_PSK_TO_MS_PSK_MAX_SIZE</span></code></a>.</p>
-</li>
-<li><p class="first">Relax definition of implementation-defined types.</p>
-<ul class="simple">
-<li>This is indicated in the specification by <code class="docutils literal"><span class="pre">/*</span> <span class="pre">implementation-defined</span> <span class="pre">type</span> <span class="pre">*/</span></code> in the type definition.</li>
-<li>The specification only defines the name of implementation-defined types, and does not require that the implementation is a C struct.</li>
-</ul>
-</li>
-<li><p class="first">Zero-length keys are not permitted. Attempting to create one will now result in an error.</p>
-</li>
-<li><p class="first">Relax the constraints on inputs to key derivation:</p>
-<ul class="simple">
-<li><a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_input_bytes" title="psa_key_derivation_input_bytes"><code class="xref any c c-func docutils literal"><span class="pre">psa_key_derivation_input_bytes()</span></code></a> can be used for secret input steps. This is necessary if a zero-length input is required by the application.</li>
-<li><a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_input_key" title="psa_key_derivation_input_key"><code class="xref any c c-func docutils literal"><span class="pre">psa_key_derivation_input_key()</span></code></a> can be used for non-secret input steps.</li>
-</ul>
-</li>
-<li><p class="first">Multi-part cipher operations now require that the IV is passed using <a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_set_iv" title="psa_cipher_set_iv"><code class="xref any c c-func docutils literal"><span class="pre">psa_cipher_set_iv()</span></code></a>, the option to provide this as part of the input to <a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_update" title="psa_cipher_update"><code class="xref any c c-func docutils literal"><span class="pre">psa_cipher_update()</span></code></a> has been removed.</p>
-<p>The format of the output from <a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_encrypt" title="psa_cipher_encrypt"><code class="xref any c c-func docutils literal"><span class="pre">psa_cipher_encrypt()</span></code></a>, and input to <a class="reference internal" href="../api/ops/ciphers.html#c.psa_cipher_decrypt" title="psa_cipher_decrypt"><code class="xref any c c-func docutils literal"><span class="pre">psa_cipher_decrypt()</span></code></a>, is documented.</p>
-</li>
-<li><p class="first">Support macros to calculate the size of output buffers, IVs and nonces.</p>
-<ul class="simple">
-<li>Macros to calculate a key and/or algorithm specific result are provided for all output buffers. The new macros are:<ul>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_NONCE_LENGTH" title="PSA_AEAD_NONCE_LENGTH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_AEAD_NONCE_LENGTH()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_ENCRYPT_OUTPUT_SIZE" title="PSA_CIPHER_ENCRYPT_OUTPUT_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_CIPHER_ENCRYPT_OUTPUT_SIZE()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_DECRYPT_OUTPUT_SIZE" title="PSA_CIPHER_DECRYPT_OUTPUT_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_CIPHER_DECRYPT_OUTPUT_SIZE()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_UPDATE_OUTPUT_SIZE" title="PSA_CIPHER_UPDATE_OUTPUT_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_CIPHER_UPDATE_OUTPUT_SIZE()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_FINISH_OUTPUT_SIZE" title="PSA_CIPHER_FINISH_OUTPUT_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_CIPHER_FINISH_OUTPUT_SIZE()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_IV_LENGTH" title="PSA_CIPHER_IV_LENGTH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_CIPHER_IV_LENGTH()</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/management.html#c.PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE" title="PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ka.html#c.PSA_RAW_KEY_AGREEMENT_OUTPUT_SIZE" title="PSA_RAW_KEY_AGREEMENT_OUTPUT_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_RAW_KEY_AGREEMENT_OUTPUT_SIZE()</span></code></a></li>
-</ul>
-</li>
-<li>Macros that evaluate to a maximum type-independent buffer size are provided. The new macros are:<ul>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_ENCRYPT_OUTPUT_MAX_SIZE" title="PSA_AEAD_ENCRYPT_OUTPUT_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_AEAD_ENCRYPT_OUTPUT_MAX_SIZE()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_DECRYPT_OUTPUT_MAX_SIZE" title="PSA_AEAD_DECRYPT_OUTPUT_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_AEAD_DECRYPT_OUTPUT_MAX_SIZE()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_UPDATE_OUTPUT_MAX_SIZE" title="PSA_AEAD_UPDATE_OUTPUT_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_AEAD_UPDATE_OUTPUT_MAX_SIZE()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_FINISH_OUTPUT_MAX_SIZE" title="PSA_AEAD_FINISH_OUTPUT_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_AEAD_FINISH_OUTPUT_MAX_SIZE</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_VERIFY_OUTPUT_MAX_SIZE" title="PSA_AEAD_VERIFY_OUTPUT_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_AEAD_VERIFY_OUTPUT_MAX_SIZE</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_NONCE_MAX_SIZE" title="PSA_AEAD_NONCE_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_AEAD_NONCE_MAX_SIZE</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_TAG_MAX_SIZE" title="PSA_AEAD_TAG_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_AEAD_TAG_MAX_SIZE</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/pke.html#c.PSA_ASYMMETRIC_ENCRYPT_OUTPUT_MAX_SIZE" title="PSA_ASYMMETRIC_ENCRYPT_OUTPUT_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ASYMMETRIC_ENCRYPT_OUTPUT_MAX_SIZE</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/pke.html#c.PSA_ASYMMETRIC_DECRYPT_OUTPUT_MAX_SIZE" title="PSA_ASYMMETRIC_DECRYPT_OUTPUT_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ASYMMETRIC_DECRYPT_OUTPUT_MAX_SIZE</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_ENCRYPT_OUTPUT_MAX_SIZE" title="PSA_CIPHER_ENCRYPT_OUTPUT_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_CIPHER_ENCRYPT_OUTPUT_MAX_SIZE()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_DECRYPT_OUTPUT_MAX_SIZE" title="PSA_CIPHER_DECRYPT_OUTPUT_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_CIPHER_DECRYPT_OUTPUT_MAX_SIZE()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_UPDATE_OUTPUT_MAX_SIZE" title="PSA_CIPHER_UPDATE_OUTPUT_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_CIPHER_UPDATE_OUTPUT_MAX_SIZE()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_FINISH_OUTPUT_MAX_SIZE" title="PSA_CIPHER_FINISH_OUTPUT_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_CIPHER_FINISH_OUTPUT_MAX_SIZE</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_CIPHER_IV_MAX_SIZE" title="PSA_CIPHER_IV_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_CIPHER_IV_MAX_SIZE</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/management.html#c.PSA_EXPORT_KEY_PAIR_MAX_SIZE" title="PSA_EXPORT_KEY_PAIR_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_EXPORT_KEY_PAIR_MAX_SIZE</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/management.html#c.PSA_EXPORT_PUBLIC_KEY_MAX_SIZE" title="PSA_EXPORT_PUBLIC_KEY_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_EXPORT_PUBLIC_KEY_MAX_SIZE</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ka.html#c.PSA_RAW_KEY_AGREEMENT_OUTPUT_MAX_SIZE" title="PSA_RAW_KEY_AGREEMENT_OUTPUT_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_RAW_KEY_AGREEMENT_OUTPUT_MAX_SIZE</span></code></a></li>
-</ul>
-</li>
-<li>AEAD output buffer size macros are now parameterized on the key type as well as the algorithm:<ul>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_ENCRYPT_OUTPUT_SIZE" title="PSA_AEAD_ENCRYPT_OUTPUT_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_AEAD_ENCRYPT_OUTPUT_SIZE()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_DECRYPT_OUTPUT_SIZE" title="PSA_AEAD_DECRYPT_OUTPUT_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_AEAD_DECRYPT_OUTPUT_SIZE()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_UPDATE_OUTPUT_SIZE" title="PSA_AEAD_UPDATE_OUTPUT_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_AEAD_UPDATE_OUTPUT_SIZE()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_FINISH_OUTPUT_SIZE" title="PSA_AEAD_FINISH_OUTPUT_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_AEAD_FINISH_OUTPUT_SIZE()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_TAG_LENGTH" title="PSA_AEAD_TAG_LENGTH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_AEAD_TAG_LENGTH()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_VERIFY_OUTPUT_SIZE" title="PSA_AEAD_VERIFY_OUTPUT_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_AEAD_VERIFY_OUTPUT_SIZE()</span></code></a></li>
-</ul>
-</li>
-<li>Some existing macros have been renamed to ensure that the name of the support macros are consistent. The following macros have been renamed:<ul>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_AEAD_WITH_DEFAULT_TAG_LENGTH()</span></code> → <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG" title="PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG()</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_AEAD_WITH_TAG_LENGTH()</span></code> → <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_AEAD_WITH_SHORTENED_TAG" title="PSA_ALG_AEAD_WITH_SHORTENED_TAG"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_AEAD_WITH_SHORTENED_TAG()</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_EXPORT_MAX_SIZE()</span></code> → <a class="reference internal" href="../api/keys/management.html#c.PSA_EXPORT_KEY_OUTPUT_SIZE" title="PSA_EXPORT_KEY_OUTPUT_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_EXPORT_KEY_OUTPUT_SIZE()</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">PSA_HASH_SIZE()</span></code> → <a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_LENGTH" title="PSA_HASH_LENGTH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_HASH_LENGTH()</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">PSA_MAC_FINAL_SIZE()</span></code> → <a class="reference internal" href="../api/ops/macs.html#c.PSA_MAC_LENGTH" title="PSA_MAC_LENGTH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_MAC_LENGTH()</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">PSA_BLOCK_CIPHER_BLOCK_SIZE()</span></code> → <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_BLOCK_CIPHER_BLOCK_LENGTH" title="PSA_BLOCK_CIPHER_BLOCK_LENGTH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_BLOCK_CIPHER_BLOCK_LENGTH()</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">PSA_MAX_BLOCK_CIPHER_BLOCK_SIZE</span></code> → <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE" title="PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE</span></code></a></li>
-</ul>
-</li>
-<li>Documentation of the macros and of related APIs has been updated to reference the related API elements.</li>
-</ul>
-</li>
-<li><p class="first">Provide hash-and-sign operations as well as sign-the-hash operations. The API for asymmetric signature has been changed to clarify the use of the new functions.</p>
-<ul class="simple">
-<li>The existing asymmetric signature API has been renamed to clarify that this is for signing a hash that is already computed:<ul>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_USAGE_SIGN</span></code> → <a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_SIGN_HASH" title="PSA_KEY_USAGE_SIGN_HASH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_USAGE_SIGN_HASH</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_USAGE_VERIFY</span></code> → <a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_VERIFY_HASH" title="PSA_KEY_USAGE_VERIFY_HASH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_USAGE_VERIFY_HASH</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">psa_asymmetric_sign()</span></code> → <a class="reference internal" href="../api/ops/sign.html#c.psa_sign_hash" title="psa_sign_hash"><code class="xref any c c-func docutils literal"><span class="pre">psa_sign_hash()</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">psa_asymmetric_verify()</span></code> → <a class="reference internal" href="../api/ops/sign.html#c.psa_verify_hash" title="psa_verify_hash"><code class="xref any c c-func docutils literal"><span class="pre">psa_verify_hash()</span></code></a></li>
-</ul>
-</li>
-<li>New APIs added to provide the complete message signing operation:<ul>
-<li><a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_SIGN_MESSAGE" title="PSA_KEY_USAGE_SIGN_MESSAGE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_USAGE_SIGN_MESSAGE</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_VERIFY_MESSAGE" title="PSA_KEY_USAGE_VERIFY_MESSAGE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_USAGE_VERIFY_MESSAGE</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.psa_sign_message" title="psa_sign_message"><code class="xref any c c-func docutils literal"><span class="pre">psa_sign_message()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.psa_verify_message" title="psa_verify_message"><code class="xref any c c-func docutils literal"><span class="pre">psa_verify_message()</span></code></a></li>
-</ul>
-</li>
-<li>New Support macros to identify which algorithms can be used in which signing API:<ul>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_SIGN_HASH" title="PSA_ALG_IS_SIGN_HASH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_SIGN_HASH()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_SIGN_MESSAGE" title="PSA_ALG_IS_SIGN_MESSAGE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_SIGN_MESSAGE()</span></code></a></li>
-</ul>
-</li>
-<li>Renamed support macros that apply to both signing APIs:<ul>
-<li><code class="docutils literal"><span class="pre">PSA_ASYMMETRIC_SIGN_OUTPUT_SIZE()</span></code> → <a class="reference internal" href="../api/ops/sign.html#c.PSA_SIGN_OUTPUT_SIZE" title="PSA_SIGN_OUTPUT_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_SIGN_OUTPUT_SIZE()</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">PSA_ASYMMETRIC_SIGNATURE_MAX_SIZE</span></code> → <a class="reference internal" href="../api/ops/sign.html#c.PSA_SIGNATURE_MAX_SIZE" title="PSA_SIGNATURE_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_SIGNATURE_MAX_SIZE</span></code></a></li>
-</ul>
-</li>
-<li>The usage flag values have been changed, including for <a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_DERIVE" title="PSA_KEY_USAGE_DERIVE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_USAGE_DERIVE</span></code></a>.</li>
-</ul>
-</li>
-<li><p class="first">Restructure <a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t"><code class="xref any c c-type docutils literal"><span class="pre">psa_key_type_t</span></code></a> and reassign all key type values.</p>
-<ul class="simple">
-<li><a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t"><code class="xref any c c-type docutils literal"><span class="pre">psa_key_type_t</span></code></a> changes from 32-bit to 16-bit integer.</li>
-<li>Reassigned the key type categories.</li>
-<li>Add a parity bit to the key type to ensure that valid key type values differ by at least 2 bits.</li>
-<li>16-bit elliptic curve ids (<code class="docutils literal"><span class="pre">psa_ecc_curve_t</span></code>) replaced by 8-bit ECC curve family ids (<a class="reference internal" href="../api/keys/types.html#c.psa_ecc_family_t" title="psa_ecc_family_t"><code class="xref any c c-type docutils literal"><span class="pre">psa_ecc_family_t</span></code></a>).
-16-bit Diffie-Hellman group ids (<code class="docutils literal"><span class="pre">psa_dh_group_t</span></code>) replaced by 8-bit DH group family ids (<a class="reference internal" href="../api/keys/types.html#c.psa_dh_family_t" title="psa_dh_family_t"><code class="xref any c c-type docutils literal"><span class="pre">psa_dh_family_t</span></code></a>).<ul>
-<li>These ids are no longer related to the IANA Group Registry specification.</li>
-<li>The new key type values do not encode the key size for ECC curves or DH groups. The key bit size from the key attributes identify a specific ECC curve or DH group within the family.</li>
-</ul>
-</li>
-<li>The following macros have been removed:<ul>
-<li><code class="docutils literal"><span class="pre">PSA_DH_GROUP_FFDHE2048</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_DH_GROUP_FFDHE3072</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_DH_GROUP_FFDHE4096</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_DH_GROUP_FFDHE6144</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_DH_GROUP_FFDHE8192</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_BITS</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_BRAINPOOL_P256R1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_BRAINPOOL_P384R1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_BRAINPOOL_P512R1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_CURVE25519</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_CURVE448</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECP160K1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECP160R1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECP160R2</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECP192K1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECP192R1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECP224K1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECP224R1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECP256K1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECP256R1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECP384R1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECP521R1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECT163K1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECT163R1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECT163R2</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECT193R1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECT193R2</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECT233K1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECT233R1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECT239K1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECT283K1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECT283R1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECT409K1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECT409R1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECT571K1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ECC_CURVE_SECT571R1</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_GET_CURVE</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_KEY_TYPE_GET_GROUP</span></code></li>
-</ul>
-</li>
-<li>The following macros have been added:<ul>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_DH_FAMILY_RFC7919" title="PSA_DH_FAMILY_RFC7919"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_DH_FAMILY_RFC7919</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_BRAINPOOL_P_R1" title="PSA_ECC_FAMILY_BRAINPOOL_P_R1"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_BRAINPOOL_P_R1</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_SECP_K1" title="PSA_ECC_FAMILY_SECP_K1"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_SECP_K1</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_SECP_R1" title="PSA_ECC_FAMILY_SECP_R1"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_SECP_R1</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_SECP_R2" title="PSA_ECC_FAMILY_SECP_R2"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_SECP_R2</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_SECT_K1" title="PSA_ECC_FAMILY_SECT_K1"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_SECT_K1</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_SECT_R1" title="PSA_ECC_FAMILY_SECT_R1"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_SECT_R1</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_SECT_R2" title="PSA_ECC_FAMILY_SECT_R2"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_SECT_R2</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_MONTGOMERY" title="PSA_ECC_FAMILY_MONTGOMERY"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_MONTGOMERY</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_DH_GET_FAMILY" title="PSA_KEY_TYPE_DH_GET_FAMILY"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_DH_GET_FAMILY</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_ECC_GET_FAMILY" title="PSA_KEY_TYPE_ECC_GET_FAMILY"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_ECC_GET_FAMILY</span></code></a></li>
-</ul>
-</li>
-<li>The following macros have new values:<ul>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_AES" title="PSA_KEY_TYPE_AES"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_AES</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_ARC4" title="PSA_KEY_TYPE_ARC4"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_ARC4</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_CAMELLIA" title="PSA_KEY_TYPE_CAMELLIA"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_CAMELLIA</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_CHACHA20" title="PSA_KEY_TYPE_CHACHA20"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_CHACHA20</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_DERIVE" title="PSA_KEY_TYPE_DERIVE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_DERIVE</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_DES" title="PSA_KEY_TYPE_DES"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_DES</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_HMAC" title="PSA_KEY_TYPE_HMAC"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_HMAC</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_NONE" title="PSA_KEY_TYPE_NONE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_NONE</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_RAW_DATA" title="PSA_KEY_TYPE_RAW_DATA"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_RAW_DATA</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_RSA_KEY_PAIR" title="PSA_KEY_TYPE_RSA_KEY_PAIR"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_RSA_KEY_PAIR</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_RSA_PUBLIC_KEY" title="PSA_KEY_TYPE_RSA_PUBLIC_KEY"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_RSA_PUBLIC_KEY</span></code></a></li>
-</ul>
-</li>
-<li>The following macros with specification-defined values have new example implementations:<ul>
-<li><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_BLOCK_CIPHER_BLOCK_LENGTH" title="PSA_BLOCK_CIPHER_BLOCK_LENGTH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_BLOCK_CIPHER_BLOCK_LENGTH</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_DH_KEY_PAIR" title="PSA_KEY_TYPE_DH_KEY_PAIR"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_DH_KEY_PAIR</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_DH_PUBLIC_KEY" title="PSA_KEY_TYPE_DH_PUBLIC_KEY"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_DH_PUBLIC_KEY</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_ECC_KEY_PAIR" title="PSA_KEY_TYPE_ECC_KEY_PAIR"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_ECC_KEY_PAIR</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_ECC_PUBLIC_KEY" title="PSA_KEY_TYPE_ECC_PUBLIC_KEY"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_ECC_PUBLIC_KEY</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_ASYMMETRIC" title="PSA_KEY_TYPE_IS_ASYMMETRIC"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_IS_ASYMMETRIC</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_DH" title="PSA_KEY_TYPE_IS_DH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_IS_DH</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_DH_KEY_PAIR" title="PSA_KEY_TYPE_IS_DH_KEY_PAIR"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_IS_DH_KEY_PAIR</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_DH_PUBLIC_KEY" title="PSA_KEY_TYPE_IS_DH_PUBLIC_KEY"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_IS_DH_PUBLIC_KEY</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_ECC" title="PSA_KEY_TYPE_IS_ECC"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_IS_ECC</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_ECC_KEY_PAIR" title="PSA_KEY_TYPE_IS_ECC_KEY_PAIR"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_IS_ECC_KEY_PAIR</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY" title="PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_KEY_PAIR" title="PSA_KEY_TYPE_IS_KEY_PAIR"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_IS_KEY_PAIR</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_PUBLIC_KEY" title="PSA_KEY_TYPE_IS_PUBLIC_KEY"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_IS_PUBLIC_KEY</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_RSA" title="PSA_KEY_TYPE_IS_RSA"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_IS_RSA</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_UNSTRUCTURED" title="PSA_KEY_TYPE_IS_UNSTRUCTURED"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_IS_UNSTRUCTURED</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_KEY_PAIR_OF_PUBLIC_KEY" title="PSA_KEY_TYPE_KEY_PAIR_OF_PUBLIC_KEY"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_KEY_PAIR_OF_PUBLIC_KEY</span></code></a></li>
-<li><a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR" title="PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR</span></code></a></li>
-</ul>
-</li>
-</ul>
-</li>
-<li><p class="first">Add ECC family <a class="reference internal" href="../api/keys/types.html#c.PSA_ECC_FAMILY_FRP" title="PSA_ECC_FAMILY_FRP"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ECC_FAMILY_FRP</span></code></a> for the FRP256v1 curve.</p>
-</li>
-<li><p class="first">Restructure <a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t"><code class="xref any c c-type docutils literal"><span class="pre">psa_algorithm_t</span></code></a> encoding, to increase consistency across algorithm categories.</p>
-<ul class="simple">
-<li>Algorithms that include a hash operation all use the same structure to encode the hash algorithm. The following <code class="docutils literal"><span class="pre">PSA_ALG_XXXX_GET_HASH()</span></code> macros have all been replaced by a single macro <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_GET_HASH" title="PSA_ALG_GET_HASH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_GET_HASH()</span></code></a>:<ul>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_HKDF_GET_HASH()</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_HMAC_GET_HASH()</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_RSA_OAEP_GET_HASH()</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_SIGN_GET_HASH()</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_TLS12_PRF_GET_HASH()</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_ALG_TLS12_PSK_TO_MS_GET_HASH()</span></code></li>
-</ul>
-</li>
-<li>Stream cipher algorithm macros have been removed; the key type indicates which cipher to use. Instead of <code class="docutils literal"><span class="pre">PSA_ALG_ARC4</span></code> and <code class="docutils literal"><span class="pre">PSA_ALG_CHACHA20</span></code>, use <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_STREAM_CIPHER" title="PSA_ALG_STREAM_CIPHER"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_STREAM_CIPHER</span></code></a>.</li>
-</ul>
-<p>All of the other <code class="docutils literal"><span class="pre">PSA_ALG_XXX</span></code> macros have updated values or updated example implementations.</p>
-<ul class="simple">
-<li>The following macros have new values:<ul>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ANY_HASH" title="PSA_ALG_ANY_HASH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_ANY_HASH</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_CBC_MAC" title="PSA_ALG_CBC_MAC"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_CBC_MAC</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_CBC_NO_PADDING" title="PSA_ALG_CBC_NO_PADDING"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_CBC_NO_PADDING</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_CBC_PKCS7" title="PSA_ALG_CBC_PKCS7"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_CBC_PKCS7</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_CCM" title="PSA_ALG_CCM"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_CCM</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_CFB" title="PSA_ALG_CFB"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_CFB</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_CHACHA20_POLY1305" title="PSA_ALG_CHACHA20_POLY1305"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_CHACHA20_POLY1305</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_CMAC" title="PSA_ALG_CMAC"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_CMAC</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_CTR" title="PSA_ALG_CTR"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_CTR</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_ECDH" title="PSA_ALG_ECDH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_ECDH</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ECDSA_ANY" title="PSA_ALG_ECDSA_ANY"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_ECDSA_ANY</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_FFDH" title="PSA_ALG_FFDH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_FFDH</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_GCM" title="PSA_ALG_GCM"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_GCM</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_MD2" title="PSA_ALG_MD2"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_MD2</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_MD4" title="PSA_ALG_MD4"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_MD4</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_MD5" title="PSA_ALG_MD5"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_MD5</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_OFB" title="PSA_ALG_OFB"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_OFB</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_RIPEMD160" title="PSA_ALG_RIPEMD160"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_RIPEMD160</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/pke.html#c.PSA_ALG_RSA_PKCS1V15_CRYPT" title="PSA_ALG_RSA_PKCS1V15_CRYPT"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_RSA_PKCS1V15_CRYPT</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PKCS1V15_SIGN_RAW" title="PSA_ALG_RSA_PKCS1V15_SIGN_RAW"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_RSA_PKCS1V15_SIGN_RAW</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_1" title="PSA_ALG_SHA_1"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA_1</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_224" title="PSA_ALG_SHA_224"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA_224</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_256" title="PSA_ALG_SHA_256"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA_256</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_384" title="PSA_ALG_SHA_384"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA_384</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_512" title="PSA_ALG_SHA_512"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA_512</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_512_224" title="PSA_ALG_SHA_512_224"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA_512_224</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_512_256" title="PSA_ALG_SHA_512_256"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA_512_256</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA3_224" title="PSA_ALG_SHA3_224"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA3_224</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA3_256" title="PSA_ALG_SHA3_256"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA3_256</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA3_384" title="PSA_ALG_SHA3_384"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA3_384</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA3_512" title="PSA_ALG_SHA3_512"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_SHA3_512</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_XTS" title="PSA_ALG_XTS"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_XTS</span></code></a></li>
-</ul>
-</li>
-<li>The following macros with specification-defined values have new example implementations:<ul>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG" title="PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_AEAD_WITH_SHORTENED_TAG" title="PSA_ALG_AEAD_WITH_SHORTENED_TAG"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_AEAD_WITH_SHORTENED_TAG()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_DETERMINISTIC_ECDSA" title="PSA_ALG_DETERMINISTIC_ECDSA"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_DETERMINISTIC_ECDSA()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ECDSA" title="PSA_ALG_ECDSA"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_ECDSA()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_FULL_LENGTH_MAC" title="PSA_ALG_FULL_LENGTH_MAC"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_FULL_LENGTH_MAC()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_HKDF" title="PSA_ALG_HKDF"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_HKDF()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_HMAC" title="PSA_ALG_HMAC"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_HMAC()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_AEAD" title="PSA_ALG_IS_AEAD"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_AEAD()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_IS_AEAD_ON_BLOCK_CIPHER" title="PSA_ALG_IS_AEAD_ON_BLOCK_CIPHER"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_AEAD_ON_BLOCK_CIPHER()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_ASYMMETRIC_ENCRYPTION" title="PSA_ALG_IS_ASYMMETRIC_ENCRYPTION"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_ASYMMETRIC_ENCRYPTION()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_IS_BLOCK_CIPHER_MAC" title="PSA_ALG_IS_BLOCK_CIPHER_MAC"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_BLOCK_CIPHER_MAC()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_CIPHER" title="PSA_ALG_IS_CIPHER"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_CIPHER()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_DETERMINISTIC_ECDSA" title="PSA_ALG_IS_DETERMINISTIC_ECDSA"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_DETERMINISTIC_ECDSA()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_IS_ECDH" title="PSA_ALG_IS_ECDH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_ECDH()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_ECDSA" title="PSA_ALG_IS_ECDSA"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_ECDSA()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_IS_FFDH" title="PSA_ALG_IS_FFDH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_FFDH()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_HASH" title="PSA_ALG_IS_HASH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_HASH()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_HASH_AND_SIGN" title="PSA_ALG_IS_HASH_AND_SIGN"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_HASH_AND_SIGN()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_IS_HKDF" title="PSA_ALG_IS_HKDF"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_HKDF()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_IS_HMAC" title="PSA_ALG_IS_HMAC"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_HMAC()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_KEY_AGREEMENT" title="PSA_ALG_IS_KEY_AGREEMENT"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_KEY_AGREEMENT()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_KEY_DERIVATION" title="PSA_ALG_IS_KEY_DERIVATION"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_KEY_DERIVATION()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_MAC" title="PSA_ALG_IS_MAC"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_MAC()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_RANDOMIZED_ECDSA" title="PSA_ALG_IS_RANDOMIZED_ECDSA"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_RANDOMIZED_ECDSA()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_IS_RAW_KEY_AGREEMENT" title="PSA_ALG_IS_RAW_KEY_AGREEMENT"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_RAW_KEY_AGREEMENT()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/pke.html#c.PSA_ALG_IS_RSA_OAEP" title="PSA_ALG_IS_RSA_OAEP"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_RSA_OAEP()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_RSA_PKCS1V15_SIGN" title="PSA_ALG_IS_RSA_PKCS1V15_SIGN"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_RSA_PKCS1V15_SIGN()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_RSA_PSS" title="PSA_ALG_IS_RSA_PSS"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_RSA_PSS()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_SIGN" title="PSA_ALG_IS_SIGN"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_SIGN()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_SIGN_MESSAGE" title="PSA_ALG_IS_SIGN_MESSAGE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_SIGN_MESSAGE()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_IS_STREAM_CIPHER" title="PSA_ALG_IS_STREAM_CIPHER"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_STREAM_CIPHER()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_IS_TLS12_PRF" title="PSA_ALG_IS_TLS12_PRF"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_TLS12_PRF()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_IS_TLS12_PSK_TO_MS" title="PSA_ALG_IS_TLS12_PSK_TO_MS"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_TLS12_PSK_TO_MS()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_WILDCARD" title="PSA_ALG_IS_WILDCARD"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_IS_WILDCARD()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_KEY_AGREEMENT" title="PSA_ALG_KEY_AGREEMENT"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_KEY_AGREEMENT()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_KEY_AGREEMENT_GET_BASE" title="PSA_ALG_KEY_AGREEMENT_GET_BASE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_KEY_AGREEMENT_GET_BASE()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_KEY_AGREEMENT_GET_KDF" title="PSA_ALG_KEY_AGREEMENT_GET_KDF"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_KEY_AGREEMENT_GET_KDF()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/pke.html#c.PSA_ALG_RSA_OAEP" title="PSA_ALG_RSA_OAEP"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_RSA_OAEP()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PKCS1V15_SIGN" title="PSA_ALG_RSA_PKCS1V15_SIGN"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_RSA_PKCS1V15_SIGN()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PSS" title="PSA_ALG_RSA_PSS"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_RSA_PSS()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_TLS12_PRF" title="PSA_ALG_TLS12_PRF"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_TLS12_PRF()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_TLS12_PSK_TO_MS" title="PSA_ALG_TLS12_PSK_TO_MS"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_TLS12_PSK_TO_MS()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_TRUNCATED_MAC" title="PSA_ALG_TRUNCATED_MAC"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_TRUNCATED_MAC()</span></code></a></li>
-</ul>
-</li>
-</ul>
-</li>
-<li><p class="first">Added ECB block cipher mode, with no padding, as <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_ECB_NO_PADDING" title="PSA_ALG_ECB_NO_PADDING"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ALG_ECB_NO_PADDING</span></code></a>.</p>
-</li>
-<li><p class="first">Add functions to suspend and resume hash operations:</p>
-<ul class="simple">
-<li><a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_suspend" title="psa_hash_suspend"><code class="xref any c c-func docutils literal"><span class="pre">psa_hash_suspend()</span></code></a> halts the current operation and outputs a hash suspend state.</li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.psa_hash_resume" title="psa_hash_resume"><code class="xref any c c-func docutils literal"><span class="pre">psa_hash_resume()</span></code></a> continues a previously suspended hash operation.</li>
-</ul>
-<p>The format of the hash suspend state is documented in <a class="reference internal" href="../api/ops/hashes.html#hash-suspend-state"><span class="secref">Hash suspend state</span></a>, and supporting macros are provided for using this API:</p>
-<ul class="simple">
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_SUSPEND_OUTPUT_SIZE" title="PSA_HASH_SUSPEND_OUTPUT_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_HASH_SUSPEND_OUTPUT_SIZE()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_SUSPEND_OUTPUT_MAX_SIZE" title="PSA_HASH_SUSPEND_OUTPUT_MAX_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_HASH_SUSPEND_OUTPUT_MAX_SIZE</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_SUSPEND_ALGORITHM_FIELD_LENGTH" title="PSA_HASH_SUSPEND_ALGORITHM_FIELD_LENGTH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_HASH_SUSPEND_ALGORITHM_FIELD_LENGTH</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_SUSPEND_INPUT_LENGTH_FIELD_LENGTH" title="PSA_HASH_SUSPEND_INPUT_LENGTH_FIELD_LENGTH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_HASH_SUSPEND_INPUT_LENGTH_FIELD_LENGTH()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_SUSPEND_HASH_STATE_FIELD_LENGTH" title="PSA_HASH_SUSPEND_HASH_STATE_FIELD_LENGTH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_HASH_SUSPEND_HASH_STATE_FIELD_LENGTH()</span></code></a></li>
-<li><a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_BLOCK_LENGTH" title="PSA_HASH_BLOCK_LENGTH"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_HASH_BLOCK_LENGTH()</span></code></a></li>
-</ul>
-</li>
-<li><p class="first">Complement <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_STORAGE_FAILURE" title="PSA_ERROR_STORAGE_FAILURE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ERROR_STORAGE_FAILURE</span></code></a> with new error codes <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_DATA_CORRUPT" title="PSA_ERROR_DATA_CORRUPT"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ERROR_DATA_CORRUPT</span></code></a> and <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_DATA_INVALID" title="PSA_ERROR_DATA_INVALID"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ERROR_DATA_INVALID</span></code></a>. These permit an implementation to distinguish different causes of failure when reading from key storage.</p>
-</li>
-<li><p class="first">Added input step <a class="reference internal" href="../api/ops/kdf.html#c.PSA_KEY_DERIVATION_INPUT_CONTEXT" title="PSA_KEY_DERIVATION_INPUT_CONTEXT"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_DERIVATION_INPUT_CONTEXT</span></code></a> for key derivation, supporting obvious mapping from the step identifiers to common KDF constructions.</p>
-</li>
-</ul>
-</div>
-<div class="section" id="clarifications">
-<h4>Clarifications</h4>
-<ul class="simple">
-<li>Clarified rules regarding modification of parameters in concurrent environments.</li>
-<li>Guarantee that <a class="reference internal" href="../api/keys/management.html#c.psa_destroy_key" title="psa_destroy_key"><code class="docutils literal"><span class="pre">psa_destroy_key</span></code></a><code class="docutils literal"><span class="pre">(</span></code><a class="reference internal" href="../api/keys/ids.html#c.PSA_KEY_ID_NULL" title="PSA_KEY_ID_NULL"><code class="docutils literal"><span class="pre">PSA_KEY_ID_NULL</span></code></a><code class="docutils literal"><span class="pre">)</span></code> always returns <a class="reference internal" href="../api/library/status.html#c.PSA_SUCCESS" title="PSA_SUCCESS"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_SUCCESS</span></code></a>.</li>
-<li>Clarified the TLS PSK to MS key agreement algorithm.</li>
-<li>Document the key policy requirements for all APIs that accept a key parameter.</li>
-<li>Document more of the error codes for each function.</li>
-</ul>
-</div>
-<div class="section" id="id6">
-<h4>Other changes</h4>
-<ul class="simple">
-<li>Require C99 for this specification instead of C89.</li>
-<li>Removed references to non-standard mbed-crypto header files. The only header file that applications need to include is <code class="file docutils literal"><span class="pre">psa/crypto.h</span></code>.</li>
-<li>Reorganized the API reference, grouping the elements in a more natural way.</li>
-<li>Improved the cross referencing between all of the document sections, and from code snippets to API element descriptions.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="changes-between-1-0-beta-2-and-1-0-beta-3">
-<h3>Changes between <em>1.0 beta 2</em> and <em>1.0 beta 3</em></h3>
-<div class="section" id="id7">
-<h4>Changes to the API</h4>
-<ul class="simple">
-<li>Change the value of error codes, and some names, to align
-with other PSA specifications. The name changes are:<ul>
-<li><code class="docutils literal"><span class="pre">PSA_ERROR_UNKNOWN_ERROR</span></code> → <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_GENERIC_ERROR" title="PSA_ERROR_GENERIC_ERROR"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ERROR_GENERIC_ERROR</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">PSA_ERROR_OCCUPIED_SLOT</span></code> → <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_ALREADY_EXISTS" title="PSA_ERROR_ALREADY_EXISTS"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ERROR_ALREADY_EXISTS</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">PSA_ERROR_EMPTY_SLOT</span></code> → <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_DOES_NOT_EXIST" title="PSA_ERROR_DOES_NOT_EXIST"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ERROR_DOES_NOT_EXIST</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">PSA_ERROR_INSUFFICIENT_CAPACITY</span></code> → <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_INSUFFICIENT_DATA" title="PSA_ERROR_INSUFFICIENT_DATA"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ERROR_INSUFFICIENT_DATA</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">PSA_ERROR_TAMPERING_DETECTED</span></code> → <a class="reference internal" href="../api/library/status.html#c.PSA_ERROR_CORRUPTION_DETECTED" title="PSA_ERROR_CORRUPTION_DETECTED"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_ERROR_CORRUPTION_DETECTED</span></code></a></li>
-</ul>
-</li>
-<li>Change the way keys are created to avoid “half-filled” handles
-that contained key metadata, but no key material.
-Now, to create a key, first fill in a data structure containing
-its attributes, then pass this structure to a function that
-both allocates resources for the key and fills in the key
-material. This affects the following functions:<ul>
-<li><a class="reference internal" href="../api/keys/management.html#c.psa_import_key" title="psa_import_key"><code class="xref any c c-func docutils literal"><span class="pre">psa_import_key()</span></code></a>, <a class="reference internal" href="../api/keys/management.html#c.psa_generate_key" title="psa_generate_key"><code class="xref any c c-func docutils literal"><span class="pre">psa_generate_key()</span></code></a>, <code class="docutils literal"><span class="pre">psa_generator_import_key()</span></code>
-and <a class="reference internal" href="../api/keys/management.html#c.psa_copy_key" title="psa_copy_key"><code class="xref any c c-func docutils literal"><span class="pre">psa_copy_key()</span></code></a> now take an attribute structure, as
-a pointer to <a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t"><code class="xref any c c-type docutils literal"><span class="pre">psa_key_attributes_t</span></code></a>, to specify key metadata.
-This replaces the previous method of passing arguments to
-<code class="docutils literal"><span class="pre">psa_create_key()</span></code> or to the key material creation function
-or calling <code class="docutils literal"><span class="pre">psa_set_key_policy()</span></code>.</li>
-<li><code class="docutils literal"><span class="pre">psa_key_policy_t</span></code> and functions operating on that type
-no longer exist. A key’s policy is now accessible as part of
-its attributes.</li>
-<li><code class="docutils literal"><span class="pre">psa_get_key_information()</span></code> is also replaced by accessing the
-key’s attributes, retrieved with <a class="reference internal" href="../api/keys/attributes.html#c.psa_get_key_attributes" title="psa_get_key_attributes"><code class="xref any c c-func docutils literal"><span class="pre">psa_get_key_attributes()</span></code></a>.</li>
-<li><code class="docutils literal"><span class="pre">psa_create_key()</span></code> no longer exists. Instead, set the key id
-attribute and the lifetime attribute before creating the
-key material.</li>
-</ul>
-</li>
-<li>Allow <a class="reference internal" href="../api/ops/aead.html#c.psa_aead_update" title="psa_aead_update"><code class="xref any c c-func docutils literal"><span class="pre">psa_aead_update()</span></code></a> to buffer data.</li>
-<li>New buffer size calculation macros.</li>
-<li>Key identifiers are no longer specific to a given lifetime value. <code class="docutils literal"><span class="pre">psa_open_key()</span></code> no longer takes a <code class="docutils literal"><span class="pre">lifetime</span></code> parameter.</li>
-<li>Define a range of key identifiers for use by applications and a separate range for use by implementations.</li>
-<li>Avoid the unusual terminology “generator”: call them
-“key derivation operations” instead. Rename a number of functions
-and other identifiers related to for clarity and consistency:<ul>
-<li><code class="docutils literal"><span class="pre">psa_crypto_generator_t</span></code> → <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_operation_t" title="psa_key_derivation_operation_t"><code class="xref any c c-type docutils literal"><span class="pre">psa_key_derivation_operation_t</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">PSA_CRYPTO_GENERATOR_INIT</span></code> → <a class="reference internal" href="../api/ops/kdf.html#c.PSA_KEY_DERIVATION_OPERATION_INIT" title="PSA_KEY_DERIVATION_OPERATION_INIT"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_DERIVATION_OPERATION_INIT</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">psa_crypto_generator_init()</span></code> → <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_operation_init" title="psa_key_derivation_operation_init"><code class="xref any c c-func docutils literal"><span class="pre">psa_key_derivation_operation_init()</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">PSA_GENERATOR_UNBRIDLED_CAPACITY</span></code> → <a class="reference internal" href="../api/ops/kdf.html#c.PSA_KEY_DERIVATION_UNLIMITED_CAPACITY" title="PSA_KEY_DERIVATION_UNLIMITED_CAPACITY"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_DERIVATION_UNLIMITED_CAPACITY</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">psa_set_generator_capacity()</span></code> → <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_set_capacity" title="psa_key_derivation_set_capacity"><code class="xref any c c-func docutils literal"><span class="pre">psa_key_derivation_set_capacity()</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">psa_get_generator_capacity()</span></code> → <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_get_capacity" title="psa_key_derivation_get_capacity"><code class="xref any c c-func docutils literal"><span class="pre">psa_key_derivation_get_capacity()</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">psa_key_agreement()</span></code> → <a class="reference internal" href="../api/ops/ka.html#c.psa_key_derivation_key_agreement" title="psa_key_derivation_key_agreement"><code class="xref any c c-func docutils literal"><span class="pre">psa_key_derivation_key_agreement()</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">psa_generator_read()</span></code> → <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_output_bytes" title="psa_key_derivation_output_bytes"><code class="xref any c c-func docutils literal"><span class="pre">psa_key_derivation_output_bytes()</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">psa_generate_derived_key()</span></code> → <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_output_key" title="psa_key_derivation_output_key"><code class="xref any c c-func docutils literal"><span class="pre">psa_key_derivation_output_key()</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">psa_generator_abort()</span></code> → <a class="reference internal" href="../api/ops/kdf.html#c.psa_key_derivation_abort" title="psa_key_derivation_abort"><code class="xref any c c-func docutils literal"><span class="pre">psa_key_derivation_abort()</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">psa_key_agreement_raw_shared_secret()</span></code> → <a class="reference internal" href="../api/ops/ka.html#c.psa_raw_key_agreement" title="psa_raw_key_agreement"><code class="xref any c c-func docutils literal"><span class="pre">psa_raw_key_agreement()</span></code></a></li>
-<li><code class="docutils literal"><span class="pre">PSA_KDF_STEP_xxx</span></code> → <code class="docutils literal"><span class="pre">PSA_KEY_DERIVATION_INPUT_xxx</span></code></li>
-<li><code class="docutils literal"><span class="pre">PSA_xxx_KEYPAIR</span></code> → <code class="docutils literal"><span class="pre">PSA_xxx_KEY_PAIR</span></code></li>
-</ul>
-</li>
-<li>Convert TLS1.2 KDF descriptions to multi-part key derivation.</li>
-</ul>
-</div>
-<div class="section" id="id8">
-<h4>Clarifications</h4>
-<ul class="simple">
-<li>Specify <code class="docutils literal"><span class="pre">psa_generator_import_key()</span></code> for most key types.</li>
-<li>Clarify the behavior in various corner cases.</li>
-<li>Document more error conditions.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="changes-between-1-0-beta-1-and-1-0-beta-2">
-<h3>Changes between <em>1.0 beta 1</em> and <em>1.0 beta 2</em></h3>
-<div class="section" id="id9">
-<h4>Changes to the API</h4>
-<ul class="simple">
-<li>Remove obsolete definition <code class="docutils literal"><span class="pre">PSA_ALG_IS_KEY_SELECTION</span></code>.</li>
-<li><a class="reference internal" href="../api/ops/aead.html#c.PSA_AEAD_FINISH_OUTPUT_SIZE" title="PSA_AEAD_FINISH_OUTPUT_SIZE"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_AEAD_FINISH_OUTPUT_SIZE</span></code></a>: remove spurious parameter <code class="docutils literal"><span class="pre">plaintext_length</span></code>.</li>
-</ul>
-</div>
-<div class="section" id="id10">
-<h4>Clarifications</h4>
-<ul class="simple">
-<li><code class="docutils literal"><span class="pre">psa_key_agreement()</span></code>: document <code class="docutils literal"><span class="pre">alg</span></code> parameter.</li>
-</ul>
-</div>
-<div class="section" id="id11">
-<h4>Other changes</h4>
-<ul class="simple">
-<li>Document formatting improvements.</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="section" id="planned-changes-for-version-1-1-x">
-<h2>Planned changes for version 1.1.x</h2>
-<p>Future versions of this specification that use a 1.0.x version will describe the same API as this specification. Any changes will not affect application compatibility and will not introduce major features. These updates are intended to add minor requirements on implementations, introduce optional definitions, make corrections, clarify potential or actual ambiguities, or improve the documentation.</p>
-<p>These are the changes that we are currently planning to make for version 1.1.x:</p>
-<ul class="simple">
-<li>Declare identifiers for additional cryptographic algorithms.</li>
-<li>Mandate certain checks when importing some types of asymmetric keys.</li>
-<li>Specify the computation of algorithm and key type values.</li>
-<li>Further clarifications on API usage and implementation.</li>
-</ul>
-</div>
-<div class="section" id="future-additions">
-<span id="future"></span><h2>Future additions</h2>
-<p>Major additions to the API will be defined in future drafts and editions of a 1.x or 2.x version of this specification. Features that are being considered include:</p>
-<ul class="simple">
-<li>Multi-part operations for hybrid cryptography. For example, this includes hash-and-sign for EdDSA, and hybrid encryption for ECIES.</li>
-<li>Key wrapping mechanisms to extract and import keys in an encrypted and authenticated form.</li>
-<li>Key discovery mechanisms. This would enable an application to locate a key by its name or attributes.</li>
-<li>Implementation capability description. This would enable an application to determine the algorithms, key types and storage lifetimes that the implementation provides.</li>
-<li>An ownership and access control mechanism allowing a multi-client implementation to have privileged clients that are able to manage keys of other clients.</li>
-</ul>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper"><h3><a href="../index.html"><b>PSA Crypto API</b></a></h3>
-IHI 0086<br/>
-Non-confidential<br/>
-Version 1.1.0
-<span style="color: red; font-weight: bold;"></span>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="../about.html">About this document</a></li>
-</ul>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="../overview/intro.html">1. Introduction</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/goals.html">2. Design goals</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/functionality.html">3. Functionality overview</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/sample-arch.html">4. Sample architectures</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/conventions.html">5. Library conventions</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/implementation.html">6. Implementation considerations</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/usage.html">7. Usage considerations</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api/library/index.html">8. Library management reference</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api/keys/index.html">9. Key management reference</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api/ops/index.html">10. Cryptographic operation reference</a></li>
-</ul>
-<ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="example_header.html">Example header file</a></li>
-<li class="toctree-l1"><a class="reference internal" href="encodings.html">Algorithm and key type encoding</a></li>
-<li class="toctree-l1"><a class="reference internal" href="specdef_values.html">Example macro implementations</a></li>
-<li class="toctree-l1"><a class="reference internal" href="sra.html">Security Risk Assessment</a></li>
-<li class="toctree-l1 current"><a class="current reference internal" href="#">Changes to the API</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#document-change-history">Document change history</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="#changes-between-1-0-1-and-1-1-0">Changes between <em>1.0.1</em> and <em>1.1.0</em></a></li>
-<li class="toctree-l3"><a class="reference internal" href="#changes-between-1-0-0-and-1-0-1">Changes between <em>1.0.0</em> and <em>1.0.1</em></a></li>
-<li class="toctree-l3"><a class="reference internal" href="#changes-between-1-0-beta-3-and-1-0-0">Changes between <em>1.0 beta 3</em> and <em>1.0.0</em></a></li>
-<li class="toctree-l3"><a class="reference internal" href="#changes-between-1-0-beta-2-and-1-0-beta-3">Changes between <em>1.0 beta 2</em> and <em>1.0 beta 3</em></a></li>
-<li class="toctree-l3"><a class="reference internal" href="#changes-between-1-0-beta-1-and-1-0-beta-2">Changes between <em>1.0 beta 1</em> and <em>1.0 beta 2</em></a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="#planned-changes-for-version-1-1-x">Planned changes for version 1.1.x</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#future-additions">Future additions</a></li>
-</ul>
-</li>
-</ul>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="../psa_c-identifiers.html">Index of API elements</a></li>
-</ul>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="footer">
- © 2018-2022, Arm Limited or its affiliates. All rights reserved.
-
- |
- Powered by <a href="http://sphinx-doc.org/">Sphinx 1.6.7</a>
- & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
-
- </div>
-
-
-
-
- </body>
-</html>
\ No newline at end of file
+<meta http-equiv="Refresh" content="0; url='https://arm-software.github.io/psa-api/crypto/1.1/appendix/history.html'" />
diff --git a/docs/1.1.0/html/appendix/specdef_values.html b/docs/1.1.0/html/appendix/specdef_values.html
index 4d6bfb2..e39e0f9 100644
--- a/docs/1.1.0/html/appendix/specdef_values.html
+++ b/docs/1.1.0/html/appendix/specdef_values.html
@@ -1,388 +1 @@
-
-<!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/html; charset=utf-8" />
- <title>Example macro implementations — PSA Crypto API 1.1.0 documentation</title>
- <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '1.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: false,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="author" title="About these documents" href="../about.html" />
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Security Risk Assessment" href="sra.html" />
- <link rel="prev" title="Algorithm and key type encoding" href="encodings.html" />
-
- <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
-
- <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
- </head>
- <body>
-
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="example-macro-implementations">
-<span id="appendix-specdef-values"></span><h1>Example macro implementations</h1>
-<p>This appendix provides example implementations of the function-like macros that have specification-defined values.</p>
-<div class="admonition note">
-<p class="first admonition-title">Note</p>
-<p class="last">In a future version of this specification, these example implementations will be replaced with a pseudo-code representation of the macro’s computation in the macro description.</p>
-</div>
-<p>The examples here provide correct results for the valid inputs defined by each API, for an implementation that supports all of the defined algorithms and key types. An implementation can provide alternative definitions of these macros:</p>
-<ul class="simple">
-<li>If the implementation does not support all of the algorithms or key types, it can provide a simpler definition of applicable macros.</li>
-<li>If the implementation provides vendor-specific algorithms or key types, it needs to extend the definitions of applicable macros.</li>
-</ul>
-<div class="section" id="algorithm-macros">
-<h2>Algorithm macros</h2>
-<pre class="literal-block">
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG" title="PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG">PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG</a>(aead_alg) \
- ((((aead_alg) & ~0x003f8000) == 0x05400100) ? <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_CCM" title="PSA_ALG_CCM">PSA_ALG_CCM</a> : \
- (((aead_alg) & ~0x003f8000) == 0x05400200) ? <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_GCM" title="PSA_ALG_GCM">PSA_ALG_GCM</a> : \
- (((aead_alg) & ~0x003f8000) == 0x05000500) ? <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_CHACHA20_POLY1305" title="PSA_ALG_CHACHA20_POLY1305">PSA_ALG_CHACHA20_POLY1305</a> : \
- <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_NONE" title="PSA_ALG_NONE">PSA_ALG_NONE</a>)
-
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG" title="PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG">PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG</a>(aead_alg, min_tag_length) \
- ( <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_AEAD_WITH_SHORTENED_TAG" title="PSA_ALG_AEAD_WITH_SHORTENED_TAG">PSA_ALG_AEAD_WITH_SHORTENED_TAG</a>(aead_alg, min_tag_length) | 0x00008000 )
-
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_AEAD_WITH_SHORTENED_TAG" title="PSA_ALG_AEAD_WITH_SHORTENED_TAG">PSA_ALG_AEAD_WITH_SHORTENED_TAG</a>(aead_alg, tag_length) \
- ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>) (((aead_alg) & ~0x003f8000) | (((tag_length) & 0x3f) << 16)))
-
-#define <a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_AT_LEAST_THIS_LENGTH_MAC" title="PSA_ALG_AT_LEAST_THIS_LENGTH_MAC">PSA_ALG_AT_LEAST_THIS_LENGTH_MAC</a>(mac_alg, min_mac_length) \
- ( <a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_TRUNCATED_MAC" title="PSA_ALG_TRUNCATED_MAC">PSA_ALG_TRUNCATED_MAC</a>(mac_alg, min_mac_length) | 0x00008000 )
-
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_DETERMINISTIC_ECDSA" title="PSA_ALG_DETERMINISTIC_ECDSA">PSA_ALG_DETERMINISTIC_ECDSA</a>(hash_alg) \
- ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>) (0x06000700 | ((hash_alg) & 0x000000ff)))
-
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ECDSA" title="PSA_ALG_ECDSA">PSA_ALG_ECDSA</a>(hash_alg) \
- ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>) (0x06000600 | ((hash_alg) & 0x000000ff)))
-
-#define <a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_FULL_LENGTH_MAC" title="PSA_ALG_FULL_LENGTH_MAC">PSA_ALG_FULL_LENGTH_MAC</a>(mac_alg) \
- ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>) ((mac_alg) & ~0x003f8000))
-
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_GET_HASH" title="PSA_ALG_GET_HASH">PSA_ALG_GET_HASH</a>(alg) \
- (((alg) & 0x000000ff) == 0 ? <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_NONE" title="PSA_ALG_NONE">PSA_ALG_NONE</a> : 0x02000000 | ((alg) & 0x000000ff))
-
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_HKDF" title="PSA_ALG_HKDF">PSA_ALG_HKDF</a>(hash_alg) \
- ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>) (0x08000100 | ((hash_alg) & 0x000000ff)))
-
-#define <a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_HMAC" title="PSA_ALG_HMAC">PSA_ALG_HMAC</a>(hash_alg) \
- ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>) (0x03800000 | ((hash_alg) & 0x000000ff)))
-
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_AEAD" title="PSA_ALG_IS_AEAD">PSA_ALG_IS_AEAD</a>(alg) \
- (((alg) & 0x7f000000) == 0x05000000)
-
-#define <a class="reference internal" href="../api/ops/aead.html#c.PSA_ALG_IS_AEAD_ON_BLOCK_CIPHER" title="PSA_ALG_IS_AEAD_ON_BLOCK_CIPHER">PSA_ALG_IS_AEAD_ON_BLOCK_CIPHER</a>(alg) \
- (((alg) & 0x7f400000) == 0x05400000)
-
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_ASYMMETRIC_ENCRYPTION" title="PSA_ALG_IS_ASYMMETRIC_ENCRYPTION">PSA_ALG_IS_ASYMMETRIC_ENCRYPTION</a>(alg) \
- (((alg) & 0x7f000000) == 0x07000000)
-
-#define <a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_IS_BLOCK_CIPHER_MAC" title="PSA_ALG_IS_BLOCK_CIPHER_MAC">PSA_ALG_IS_BLOCK_CIPHER_MAC</a>(alg) \
- (((alg) & 0x7fc00000) == 0x03c00000)
-
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_CIPHER" title="PSA_ALG_IS_CIPHER">PSA_ALG_IS_CIPHER</a>(alg) \
- (((alg) & 0x7f000000) == 0x04000000)
-
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_DETERMINISTIC_ECDSA" title="PSA_ALG_IS_DETERMINISTIC_ECDSA">PSA_ALG_IS_DETERMINISTIC_ECDSA</a>(alg) \
- (((alg) & ~0x000000ff) == 0x06000700)
-
-#define <a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_IS_ECDH" title="PSA_ALG_IS_ECDH">PSA_ALG_IS_ECDH</a>(alg) \
- (((alg) & 0x7fff0000) == 0x09020000)
-
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_ECDSA" title="PSA_ALG_IS_ECDSA">PSA_ALG_IS_ECDSA</a>(alg) \
- (((alg) & ~0x000001ff) == 0x06000600)
-
-#define <a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_IS_FFDH" title="PSA_ALG_IS_FFDH">PSA_ALG_IS_FFDH</a>(alg) \
- (((alg) & 0x7fff0000) == 0x09010000)
-
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_HASH" title="PSA_ALG_IS_HASH">PSA_ALG_IS_HASH</a>(alg) \
- (((alg) & 0x7f000000) == 0x02000000)
-
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_HASH_AND_SIGN" title="PSA_ALG_IS_HASH_AND_SIGN">PSA_ALG_IS_HASH_AND_SIGN</a>(alg) \
- (<a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_RSA_PSS" title="PSA_ALG_IS_RSA_PSS">PSA_ALG_IS_RSA_PSS</a>(alg) || <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_RSA_PKCS1V15_SIGN" title="PSA_ALG_IS_RSA_PKCS1V15_SIGN">PSA_ALG_IS_RSA_PKCS1V15_SIGN</a>(alg) || \
- <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_ECDSA" title="PSA_ALG_IS_ECDSA">PSA_ALG_IS_ECDSA</a>(alg) || <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_HASH_EDDSA" title="PSA_ALG_IS_HASH_EDDSA">PSA_ALG_IS_HASH_EDDSA</a>(alg))
-
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_HASH_EDDSA" title="PSA_ALG_IS_HASH_EDDSA">PSA_ALG_IS_HASH_EDDSA</a>(alg) \
- (((alg) & ~0x000000ff) == 0x06000900)
-
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_IS_HKDF" title="PSA_ALG_IS_HKDF">PSA_ALG_IS_HKDF</a>(alg) \
- (((alg) & ~0x000000ff) == 0x08000100)
-
-#define <a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_IS_HMAC" title="PSA_ALG_IS_HMAC">PSA_ALG_IS_HMAC</a>(alg) \
- (((alg) & 0x7fc0ff00) == 0x03800000)
-
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_KEY_AGREEMENT" title="PSA_ALG_IS_KEY_AGREEMENT">PSA_ALG_IS_KEY_AGREEMENT</a>(alg) \
- (((alg) & 0x7f000000) == 0x09000000)
-
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_KEY_DERIVATION" title="PSA_ALG_IS_KEY_DERIVATION">PSA_ALG_IS_KEY_DERIVATION</a>(alg) \
- (((alg) & 0x7f000000) == 0x08000000)
-
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_IS_KEY_DERIVATION_STRETCHING" title="PSA_ALG_IS_KEY_DERIVATION_STRETCHING">PSA_ALG_IS_KEY_DERIVATION_STRETCHING</a>(alg) \
- (((alg) & 0x7f800000) == 0x08800000)
-
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_MAC" title="PSA_ALG_IS_MAC">PSA_ALG_IS_MAC</a>(alg) \
- (((alg) & 0x7f000000) == 0x03000000)
-
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_IS_PBKDF2_HMAC" title="PSA_ALG_IS_PBKDF2_HMAC">PSA_ALG_IS_PBKDF2_HMAC</a>(alg) \
- (((alg) & ~0x000000ff) == 0x08800100)
-
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_RANDOMIZED_ECDSA" title="PSA_ALG_IS_RANDOMIZED_ECDSA">PSA_ALG_IS_RANDOMIZED_ECDSA</a>(alg) \
- (((alg) & ~0x000000ff) == 0x06000600)
-
-#define <a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_IS_RAW_KEY_AGREEMENT" title="PSA_ALG_IS_RAW_KEY_AGREEMENT">PSA_ALG_IS_RAW_KEY_AGREEMENT</a>(alg) \
- (((alg) & 0x7f00ffff) == 0x09000000)
-
-#define <a class="reference internal" href="../api/ops/pke.html#c.PSA_ALG_IS_RSA_OAEP" title="PSA_ALG_IS_RSA_OAEP">PSA_ALG_IS_RSA_OAEP</a>(alg) \
- (((alg) & ~0x000000ff) == 0x07000300)
-
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_RSA_PKCS1V15_SIGN" title="PSA_ALG_IS_RSA_PKCS1V15_SIGN">PSA_ALG_IS_RSA_PKCS1V15_SIGN</a>(alg) \
- (((alg) & ~0x000000ff) == 0x06000200)
-
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_RSA_PSS" title="PSA_ALG_IS_RSA_PSS">PSA_ALG_IS_RSA_PSS</a>(alg) \
- (((alg) & ~0x000010ff) == 0x06000300)
-
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_RSA_PSS_ANY_SALT" title="PSA_ALG_IS_RSA_PSS_ANY_SALT">PSA_ALG_IS_RSA_PSS_ANY_SALT</a>(alg) \
- (((alg) & ~0x000000ff) == 0x06001300)
-
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_RSA_PSS_STANDARD_SALT" title="PSA_ALG_IS_RSA_PSS_STANDARD_SALT">PSA_ALG_IS_RSA_PSS_STANDARD_SALT</a>(alg) \
- (((alg) & ~0x000000ff) == 0x06000300)
-
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_SIGN" title="PSA_ALG_IS_SIGN">PSA_ALG_IS_SIGN</a>(alg) \
- (((alg) & 0x7f000000) == 0x06000000)
-
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_SIGN_HASH" title="PSA_ALG_IS_SIGN_HASH">PSA_ALG_IS_SIGN_HASH</a>(alg) \
- <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_SIGN" title="PSA_ALG_IS_SIGN">PSA_ALG_IS_SIGN</a>(alg)
-
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_IS_SIGN_MESSAGE" title="PSA_ALG_IS_SIGN_MESSAGE">PSA_ALG_IS_SIGN_MESSAGE</a>(alg) \
- (<a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_SIGN" title="PSA_ALG_IS_SIGN">PSA_ALG_IS_SIGN</a>(alg) && \
- (alg) != <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ECDSA_ANY" title="PSA_ALG_ECDSA_ANY">PSA_ALG_ECDSA_ANY</a> && (alg) != <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PKCS1V15_SIGN_RAW" title="PSA_ALG_RSA_PKCS1V15_SIGN_RAW">PSA_ALG_RSA_PKCS1V15_SIGN_RAW</a>)
-
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_ALG_IS_STREAM_CIPHER" title="PSA_ALG_IS_STREAM_CIPHER">PSA_ALG_IS_STREAM_CIPHER</a>(alg) \
- (((alg) & 0x7f800000) == 0x04800000)
-
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_IS_TLS12_PRF" title="PSA_ALG_IS_TLS12_PRF">PSA_ALG_IS_TLS12_PRF</a>(alg) \
- (((alg) & ~0x000000ff) == 0x08000200)
-
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_IS_TLS12_PSK_TO_MS" title="PSA_ALG_IS_TLS12_PSK_TO_MS">PSA_ALG_IS_TLS12_PSK_TO_MS</a>(alg) \
- (((alg) & ~0x000000ff) == 0x08000300)
-
-#define <a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_IS_WILDCARD" title="PSA_ALG_IS_WILDCARD">PSA_ALG_IS_WILDCARD</a>(alg) \
- ((<a class="reference internal" href="../api/ops/algorithms.html#c.PSA_ALG_GET_HASH" title="PSA_ALG_GET_HASH">PSA_ALG_GET_HASH</a>(alg) == <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_ANY_HASH" title="PSA_ALG_ANY_HASH">PSA_ALG_ANY_HASH</a>) || \
- (((alg) & 0x7f008000) == 0x03008000) || \
- (((alg) & 0x7f008000) == 0x05008000))
-
-#define <a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_KEY_AGREEMENT" title="PSA_ALG_KEY_AGREEMENT">PSA_ALG_KEY_AGREEMENT</a>(ka_alg, kdf_alg) \
- ((ka_alg) | (kdf_alg))
-
-#define <a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_KEY_AGREEMENT_GET_BASE" title="PSA_ALG_KEY_AGREEMENT_GET_BASE">PSA_ALG_KEY_AGREEMENT_GET_BASE</a>(alg) \
- ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)((alg) & 0xffff0000))
-
-#define <a class="reference internal" href="../api/ops/ka.html#c.PSA_ALG_KEY_AGREEMENT_GET_KDF" title="PSA_ALG_KEY_AGREEMENT_GET_KDF">PSA_ALG_KEY_AGREEMENT_GET_KDF</a>(alg) \
- ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)((alg) & 0xfe00ffff))
-
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_PBKDF2_HMAC" title="PSA_ALG_PBKDF2_HMAC">PSA_ALG_PBKDF2_HMAC</a>(hash_alg) \
- ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)(0x08800100 | ((hash_alg) & 0x000000ff)))
-
-#define <a class="reference internal" href="../api/ops/pke.html#c.PSA_ALG_RSA_OAEP" title="PSA_ALG_RSA_OAEP">PSA_ALG_RSA_OAEP</a>(hash_alg) \
- ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)(0x07000300 | ((hash_alg) & 0x000000ff)))
-
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PKCS1V15_SIGN" title="PSA_ALG_RSA_PKCS1V15_SIGN">PSA_ALG_RSA_PKCS1V15_SIGN</a>(hash_alg) \
- ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)(0x06000200 | ((hash_alg) & 0x000000ff)))
-
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PSS" title="PSA_ALG_RSA_PSS">PSA_ALG_RSA_PSS</a>(hash_alg) \
- ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)(0x06000300 | ((hash_alg) & 0x000000ff)))
-
-#define <a class="reference internal" href="../api/ops/sign.html#c.PSA_ALG_RSA_PSS_ANY_SALT" title="PSA_ALG_RSA_PSS_ANY_SALT">PSA_ALG_RSA_PSS_ANY_SALT</a>(hash_alg) \
- ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>)(0x06001300 | ((hash_alg) & 0x000000ff)))
-
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_TLS12_PRF" title="PSA_ALG_TLS12_PRF">PSA_ALG_TLS12_PRF</a>(hash_alg) \
- ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>) (0x08000200 | ((hash_alg) & 0x000000ff)))
-
-#define <a class="reference internal" href="../api/ops/kdf.html#c.PSA_ALG_TLS12_PSK_TO_MS" title="PSA_ALG_TLS12_PSK_TO_MS">PSA_ALG_TLS12_PSK_TO_MS</a>(hash_alg) \
- ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>) (0x08000300 | ((hash_alg) & 0x000000ff)))
-
-#define <a class="reference internal" href="../api/ops/macs.html#c.PSA_ALG_TRUNCATED_MAC" title="PSA_ALG_TRUNCATED_MAC">PSA_ALG_TRUNCATED_MAC</a>(mac_alg, mac_length) \
- ((<a class="reference internal" href="../api/ops/algorithms.html#c.psa_algorithm_t" title="psa_algorithm_t">psa_algorithm_t</a>) (((mac_alg) & ~0x003f8000) | (((mac_length) & 0x3f) << 16)))
-</pre>
-</div>
-<div class="section" id="key-type-macros">
-<h2>Key type macros</h2>
-<pre class="literal-block">
-#define <a class="reference internal" href="../api/ops/ciphers.html#c.PSA_BLOCK_CIPHER_BLOCK_LENGTH" title="PSA_BLOCK_CIPHER_BLOCK_LENGTH">PSA_BLOCK_CIPHER_BLOCK_LENGTH</a>(type) \
- (1u << (((type) >> 8) & 7))
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_DH_GET_FAMILY" title="PSA_KEY_TYPE_DH_GET_FAMILY">PSA_KEY_TYPE_DH_GET_FAMILY</a>(type) \
- ((<a class="reference internal" href="../api/keys/types.html#c.psa_dh_family_t" title="psa_dh_family_t">psa_dh_family_t</a>) ((type) & 0x00ff))
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_DH_KEY_PAIR" title="PSA_KEY_TYPE_DH_KEY_PAIR">PSA_KEY_TYPE_DH_KEY_PAIR</a>(group) \
- ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>) (0x7200 | (group)))
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_DH_PUBLIC_KEY" title="PSA_KEY_TYPE_DH_PUBLIC_KEY">PSA_KEY_TYPE_DH_PUBLIC_KEY</a>(group) \
- ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>) (0x4200 | (group)))
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_ECC_GET_FAMILY" title="PSA_KEY_TYPE_ECC_GET_FAMILY">PSA_KEY_TYPE_ECC_GET_FAMILY</a>(type) \
- ((<a class="reference internal" href="../api/keys/types.html#c.psa_ecc_family_t" title="psa_ecc_family_t">psa_ecc_family_t</a>) ((type) & 0x00ff))
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_ECC_KEY_PAIR" title="PSA_KEY_TYPE_ECC_KEY_PAIR">PSA_KEY_TYPE_ECC_KEY_PAIR</a>(curve) \
- ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>) (0x7100 | (curve)))
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_ECC_PUBLIC_KEY" title="PSA_KEY_TYPE_ECC_PUBLIC_KEY">PSA_KEY_TYPE_ECC_PUBLIC_KEY</a>(curve) \
- ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>) (0x4100 | (curve)))
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_ASYMMETRIC" title="PSA_KEY_TYPE_IS_ASYMMETRIC">PSA_KEY_TYPE_IS_ASYMMETRIC</a>(type) \
- (((type) & 0x4000) == 0x4000)
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_DH" title="PSA_KEY_TYPE_IS_DH">PSA_KEY_TYPE_IS_DH</a>(type) \
- ((<a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR" title="PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR</a>(type) & 0xff00) == 0x4200)
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_DH_KEY_PAIR" title="PSA_KEY_TYPE_IS_DH_KEY_PAIR">PSA_KEY_TYPE_IS_DH_KEY_PAIR</a>(type) \
- (((type) & 0xff00) == 0x7200)
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_DH_PUBLIC_KEY" title="PSA_KEY_TYPE_IS_DH_PUBLIC_KEY">PSA_KEY_TYPE_IS_DH_PUBLIC_KEY</a>(type) \
- (((type) & 0xff00) == 0x4200)
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_ECC" title="PSA_KEY_TYPE_IS_ECC">PSA_KEY_TYPE_IS_ECC</a>(type) \
- ((<a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR" title="PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR</a>(type) & 0xff00) == 0x4100)
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_ECC_KEY_PAIR" title="PSA_KEY_TYPE_IS_ECC_KEY_PAIR">PSA_KEY_TYPE_IS_ECC_KEY_PAIR</a>(type) \
- (((type) & 0xff00) == 0x7100)
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY" title="PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY">PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY</a>(type) \
- (((type) & 0xff00) == 0x4100)
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_KEY_PAIR" title="PSA_KEY_TYPE_IS_KEY_PAIR">PSA_KEY_TYPE_IS_KEY_PAIR</a>(type) \
- (((type) & 0x7000) == 0x7000)
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_PUBLIC_KEY" title="PSA_KEY_TYPE_IS_PUBLIC_KEY">PSA_KEY_TYPE_IS_PUBLIC_KEY</a>(type) \
- (((type) & 0x7000) == 0x4000)
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_RSA" title="PSA_KEY_TYPE_IS_RSA">PSA_KEY_TYPE_IS_RSA</a>(type) \
- (<a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR" title="PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR</a>(type) == 0x4001)
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_IS_UNSTRUCTURED" title="PSA_KEY_TYPE_IS_UNSTRUCTURED">PSA_KEY_TYPE_IS_UNSTRUCTURED</a>(type) \
- (((type) & 0x7000) == 0x1000 || ((type) & 0x7000) == 0x2000)
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_KEY_PAIR_OF_PUBLIC_KEY" title="PSA_KEY_TYPE_KEY_PAIR_OF_PUBLIC_KEY">PSA_KEY_TYPE_KEY_PAIR_OF_PUBLIC_KEY</a>(type) \
- ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>) ((type) | 0x3000))
-
-#define <a class="reference internal" href="../api/keys/types.html#c.PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR" title="PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR">PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR</a>(type) \
- ((<a class="reference internal" href="../api/keys/types.html#c.psa_key_type_t" title="psa_key_type_t">psa_key_type_t</a>) ((type) & ~0x3000))
-</pre>
-</div>
-<div class="section" id="hash-suspend-state-macros">
-<h2>Hash suspend state macros</h2>
-<pre class="literal-block">
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_SUSPEND_HASH_STATE_FIELD_LENGTH" title="PSA_HASH_SUSPEND_HASH_STATE_FIELD_LENGTH">PSA_HASH_SUSPEND_HASH_STATE_FIELD_LENGTH</a>(alg) \
- ((alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_MD2" title="PSA_ALG_MD2">PSA_ALG_MD2</a> ? 64 : \
- (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_MD4" title="PSA_ALG_MD4">PSA_ALG_MD4</a> || (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_MD5" title="PSA_ALG_MD5">PSA_ALG_MD5</a> ? 16 : \
- (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_RIPEMD160" title="PSA_ALG_RIPEMD160">PSA_ALG_RIPEMD160</a> || (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_1" title="PSA_ALG_SHA_1">PSA_ALG_SHA_1</a> ? 20 : \
- (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_224" title="PSA_ALG_SHA_224">PSA_ALG_SHA_224</a> || (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_256" title="PSA_ALG_SHA_256">PSA_ALG_SHA_256</a> ? 32 : \
- (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_512" title="PSA_ALG_SHA_512">PSA_ALG_SHA_512</a> || (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_384" title="PSA_ALG_SHA_384">PSA_ALG_SHA_384</a> || \
- (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_512_224" title="PSA_ALG_SHA_512_224">PSA_ALG_SHA_512_224</a> || (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_512_256" title="PSA_ALG_SHA_512_256">PSA_ALG_SHA_512_256</a> ? 64 : \
- 0)
-
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_SUSPEND_INPUT_LENGTH_FIELD_LENGTH" title="PSA_HASH_SUSPEND_INPUT_LENGTH_FIELD_LENGTH">PSA_HASH_SUSPEND_INPUT_LENGTH_FIELD_LENGTH</a>(alg) \
- ((alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_MD2" title="PSA_ALG_MD2">PSA_ALG_MD2</a> ? 1 : \
- (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_MD4" title="PSA_ALG_MD4">PSA_ALG_MD4</a> || (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_MD5" title="PSA_ALG_MD5">PSA_ALG_MD5</a> || (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_RIPEMD160" title="PSA_ALG_RIPEMD160">PSA_ALG_RIPEMD160</a> || \
- (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_1" title="PSA_ALG_SHA_1">PSA_ALG_SHA_1</a> || (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_224" title="PSA_ALG_SHA_224">PSA_ALG_SHA_224</a> || (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_256" title="PSA_ALG_SHA_256">PSA_ALG_SHA_256</a> ? 8 : \
- (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_512" title="PSA_ALG_SHA_512">PSA_ALG_SHA_512</a> || (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_384" title="PSA_ALG_SHA_384">PSA_ALG_SHA_384</a> || \
- (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_512_224" title="PSA_ALG_SHA_512_224">PSA_ALG_SHA_512_224</a> || (alg)==<a class="reference internal" href="../api/ops/hashes.html#c.PSA_ALG_SHA_512_256" title="PSA_ALG_SHA_512_256">PSA_ALG_SHA_512_256</a> ? 16 : \
- 0)
-
-#define <a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_SUSPEND_OUTPUT_SIZE" title="PSA_HASH_SUSPEND_OUTPUT_SIZE">PSA_HASH_SUSPEND_OUTPUT_SIZE</a>(alg) \
- (<a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_SUSPEND_ALGORITHM_FIELD_LENGTH" title="PSA_HASH_SUSPEND_ALGORITHM_FIELD_LENGTH">PSA_HASH_SUSPEND_ALGORITHM_FIELD_LENGTH</a> + \
- <a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_SUSPEND_INPUT_LENGTH_FIELD_LENGTH" title="PSA_HASH_SUSPEND_INPUT_LENGTH_FIELD_LENGTH">PSA_HASH_SUSPEND_INPUT_LENGTH_FIELD_LENGTH</a>(alg) + \
- <a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_SUSPEND_HASH_STATE_FIELD_LENGTH" title="PSA_HASH_SUSPEND_HASH_STATE_FIELD_LENGTH">PSA_HASH_SUSPEND_HASH_STATE_FIELD_LENGTH</a>(alg) + \
- <a class="reference internal" href="../api/ops/hashes.html#c.PSA_HASH_BLOCK_LENGTH" title="PSA_HASH_BLOCK_LENGTH">PSA_HASH_BLOCK_LENGTH</a>(alg) - 1)
-</pre>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper"><h3><a href="../index.html"><b>PSA Crypto API</b></a></h3>
-IHI 0086<br/>
-Non-confidential<br/>
-Version 1.1.0
-<span style="color: red; font-weight: bold;"></span>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="../about.html">About this document</a></li>
-</ul>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="../overview/intro.html">1. Introduction</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/goals.html">2. Design goals</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/functionality.html">3. Functionality overview</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/sample-arch.html">4. Sample architectures</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/conventions.html">5. Library conventions</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/implementation.html">6. Implementation considerations</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/usage.html">7. Usage considerations</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api/library/index.html">8. Library management reference</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api/keys/index.html">9. Key management reference</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api/ops/index.html">10. Cryptographic operation reference</a></li>
-</ul>
-<ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="example_header.html">Example header file</a></li>
-<li class="toctree-l1"><a class="reference internal" href="encodings.html">Algorithm and key type encoding</a></li>
-<li class="toctree-l1 current"><a class="current reference internal" href="#">Example macro implementations</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#algorithm-macros">Algorithm macros</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#key-type-macros">Key type macros</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#hash-suspend-state-macros">Hash suspend state macros</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="sra.html">Security Risk Assessment</a></li>
-<li class="toctree-l1"><a class="reference internal" href="history.html">Changes to the API</a></li>
-</ul>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="../psa_c-identifiers.html">Index of API elements</a></li>
-</ul>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="footer">
- © 2018-2022, Arm Limited or its affiliates. All rights reserved.
-
- |
- Powered by <a href="http://sphinx-doc.org/">Sphinx 1.6.7</a>
- & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
-
- </div>
-
-
-
-
- </body>
-</html>
\ No newline at end of file
+<meta http-equiv="Refresh" content="0; url='https://arm-software.github.io/psa-api/crypto/1.1/appendix/specdef_values.html'" />
diff --git a/docs/1.1.0/html/appendix/sra.html b/docs/1.1.0/html/appendix/sra.html
index b902d71..532ffa9 100644
--- a/docs/1.1.0/html/appendix/sra.html
+++ b/docs/1.1.0/html/appendix/sra.html
@@ -1,733 +1 @@
-
-<!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/html; charset=utf-8" />
- <title>Security Risk Assessment — PSA Crypto API 1.1.0 documentation</title>
- <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '1.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: false,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="author" title="About these documents" href="../about.html" />
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Changes to the API" href="history.html" />
- <link rel="prev" title="Example macro implementations" href="specdef_values.html" />
-
- <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
-
- <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
- </head>
- <body>
-
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="security-risk-assessment">
-<span id="sra"></span><h1>Security Risk Assessment</h1>
-<p>This Security Risk Assessment (SRA) analyses the security of the PSA Cryptography API itself, not of any specific implementation of the API, or any specific use of the API. However, the security of an implementation of this API depends on the implementation design, the capabilities of the system in which it is deployed, and the need to address some of the threats identified in this assessment.</p>
-<p>To enable this API to be suitable for a wider range of security use cases, this SRA considers a broad range of adversarial models and threats to the application and the implementation, as well as to the API.</p>
-<p>This approach allows the assessment to identify API design requirements that affect the ability for an implementation to mitigate threats that do not directly attack the API.</p>
-<p>The scope is described in <a class="reference internal" href="#adversarial-models"><span class="secref">Adversarial models</span></a>.</p>
-<div class="section" id="architecture">
-<h2>Architecture</h2>
-<div class="section" id="system-definition">
-<h3>System definition</h3>
-<p><span><a class="reference internal" href="#fig-system-entities"><span class="numref">Figure 18</span></a></span> shows the PSA Cryptography API as the defined interface that an Application uses to interact with the Cryptoprocessor.</p>
-<div class="figure" id="fig-system-entities">
-<img alt="../_images/system-entities.svg" src="../_images/system-entities.svg" /><p class="caption"><span class="caption-number">Figure 18 </span><span class="caption-text">PSA Cryptography API</span></p>
-</div>
-<div class="section" id="assumptions-constraints-and-interacting-entities">
-<h4>Assumptions, constraints, and interacting entities</h4>
-<p>This SRA makes the following assumptions about the PSA Cryptography API design:</p>
-<ul class="simple">
-<li>The API does not provide arguments that identify the caller, because they can be spoofed easily, and cannot be relied upon. It is assumed that the implementation of the API can determine the caller identity, where this is required. See <a class="reference internal" href="../overview/goals.html#isolation"><span class="secref">Optional isolation</span></a>.</li>
-<li>The API should not prevent the use of mitigations that are required by an implementation of the API. See <a class="reference internal" href="#remediation"><span class="secref">Remediation & residual risk</span></a>.</li>
-<li>The API follows best-practices for C interface design, reducing the risk of exploitable errors in the application and implementation code. See <a class="reference internal" href="../overview/goals.html#usability"><span class="secref">Ease of use</span></a>.</li>
-</ul>
-</div>
-<div class="section" id="trust-boundaries-and-information-flow">
-<span id="dfd"></span><h4>Trust boundaries and information flow</h4>
-<p>The PSA Cryptography API is the interface available to the programmer, and is the main attack surface that is analysed here. However, to ensure that the API enables the mitigation of other threats to an implementation, we also consider the system context in which the PSA Cryptography API is used.</p>
-<p><span><a class="reference internal" href="#fig-dfd-no-isolation"><span class="numref">Figure 19</span></a></span> shows the data flow for a typical application usage of the PSA Cryptography API, for example, to exchange ciphertext with an external system, or for at rest protection in system non-volatile storage. The Application uses the PSA Cryptography API to interact with the Cryptoprocessor. The Cryptoprocessor stores persistent keys in a Key Store.</p>
-<div class="figure" id="fig-dfd-no-isolation">
-<img alt="../_images/dfd_no_isolation.svg" src="../_images/dfd_no_isolation.svg" /><p class="caption"><span class="caption-number">Figure 19 </span><span class="caption-text">PSA Cryptography API dataflow diagram for an implementation with no isolation</span></p>
-</div>
-<p>For some adversarial models, <a class="reference internal" href="../about.html#term-cryptoprocessor-isolation"><span class="term">Cryptoprocessor isolation</span></a> or <a class="reference internal" href="../about.html#term-caller-isolation"><span class="term">Caller isolation</span></a> is required in the implementation to achieve the security goals. See <a class="reference internal" href="#security-goals"><span class="secref">Security goals</span></a>, and remediations R.1 and R.2 in <a class="reference internal" href="#remediation"><span class="secref">Remediation & residual risk</span></a>.</p>
-<p>The Cryptoprocessor can optionally include a trust boundary within its implementation of the API. The trust boundary shown in <span><a class="reference internal" href="#fig-dfd-crypto-isolation"><span class="numref">Figure 20</span></a></span> corresponds to Cryptoprocessor isolation.</p>
-<div class="figure" id="fig-dfd-crypto-isolation">
-<img alt="../_images/dfd_crypto_isolation.svg" src="../_images/dfd_crypto_isolation.svg" /><p class="caption"><span class="caption-number">Figure 20 </span><span class="caption-text">PSA Cryptography API dataflow diagram for an implementation with cryptoprocessor isolation</span></p>
-</div>
-<p>If the implementation supports multiple, independent client Applications within the system, each Application has its own view of the Cryptoprocessor and key store. The additional trust boundaries for a caller isolated implementation are shown in <span><a class="reference internal" href="#fig-dfd-caller-isolation"><span class="numref">Figure 21</span></a></span>.</p>
-<div class="figure" id="fig-dfd-caller-isolation">
-<img alt="../_images/dfd_caller_isolation.svg" src="../_images/dfd_caller_isolation.svg" /><p class="caption"><span class="caption-number">Figure 21 </span><span class="caption-text">PSA Cryptography API dataflow diagram for an implementation with caller isolation</span></p>
-</div>
-</div>
-</div>
-<div class="section" id="assets-and-stakeholders">
-<h3>Assets and stakeholders</h3>
-<ol class="arabic">
-<li><p class="first">Cryptographic keys and key-related assets. This includes the key properties, such as the key type, identity and policies.</p>
-<p>Stakeholders can include the SiP, the OEM, the system or application owner. Owners of a key need to be able to use the key for cryptographic operations, such as encryption or signature, and where permitted, delete, copy or extract the key.</p>
-<p>Disclosure of the cryptographic key material to an attacker defeats the protection that the use of cryptography provides. Modification of cryptographic key material or key properties by an attacker has the same end result. These allow an attacker access to the assets that are protected by the key.</p>
-</li>
-<li><p class="first">Other cryptographic assets, for example, intermediate calculation values and RNG state.</p>
-<p>Disclosure or modification of these assets can enable recovery of cryptographic keys, and loss of cryptographic protection.</p>
-</li>
-<li><p class="first">Application input/output data and cryptographic operation state.</p>
-<p>Application data is only provided to the Cryptoprocessor for cryptographic operations, and its stakeholder is the application owner.</p>
-<p>Disclosure of this data — whether it is plaintext, or other data or state — to an attacker defeats the protection that the use of cryptography provides. Modification of this data can have the same effect.</p>
-</li>
-</ol>
-</div>
-<div class="section" id="security-goals">
-<span id="id1"></span><h3>Security goals</h3>
-<p>Using cryptography is a mitigation in response to the risk of disclosure or tampering with data assets that require protection, where isolation of the attacker from the data asset is unavailable or inadequate.</p>
-<p>Using cryptography introduces other security threats. <span><a class="reference internal" href="#table-sg"><span class="numref">Table 24</span></a></span> lists the security goals for the PSA Cryptography API to address these threats.</p>
-<table border="1" class="colwidths-given longtable docutils align-right" id="table-sg">
-<caption><span class="caption-number">Table 24 </span><span class="caption-text">Security goals</span></caption>
-<colgroup>
-<col width="10%" />
-<col width="90%" />
-</colgroup>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Id</th>
-<th class="head">Description</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>G.1</td>
-<td>An attacker shall not be able to disclose the plaintext corresponding to a ciphertext for which they do not own the correct key.</td>
-</tr>
-<tr class="row-odd"><td>G.2</td>
-<td>An attacker shall not be able to generate authenticated material for which they do not own the correct key.</td>
-</tr>
-<tr class="row-even"><td>G.3</td>
-<td>An attacker shall not be able to exfiltrate keys or other private information stored by the PSA Cryptography API.</td>
-</tr>
-<tr class="row-odd"><td>G.4</td>
-<td>An attacker shall not be able to alter any state held by the implementation of the PSA Cryptography API, such as internal keys or other private information (for example, certificates, signatures, etc.).</td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-<div class="section" id="threat-model">
-<h2>Threat Model</h2>
-<div class="section" id="adversarial-models">
-<span id="id2"></span><h3>Adversarial models</h3>
-<p>The API itself has limited ability to mitigate threats. However, mitigation of some of the threats within the cryptoprocessor can place requirements on the API design. This analysis considers a broad attack surface, to also identify requirements that enable the mitigation of specific threats within a cryptoprocessor implementation.</p>
-<p><span><a class="reference internal" href="#table-adversaries"><span class="numref">Table 25</span></a></span> describes the adversarial models that are considered in this assessment.</p>
-<p>A specific implementation of the PSA Cryptography API might not include all of these attacker capabilities within its own threat model. In this case, the related threats, risks, and mitigations might not be required for that implementation.</p>
-<table border="1" class="colwidths-given longtable docutils align-right" id="table-adversaries">
-<caption><span class="caption-number">Table 25 </span><span class="caption-text">Adversarial models</span></caption>
-<colgroup>
-<col width="10%" />
-<col width="90%" />
-</colgroup>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Id</th>
-<th class="head">Description</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>M.1</td>
-<td>The Adversary is capable of accessing data that is outside the logical or physical boundaries of the system, such as messages in transit or data in storage. The adversary aims to compromise the security properties of this data, for example, revealing encrypted plaintext or injecting forged authenticated data.</td>
-</tr>
-<tr class="row-odd"><td>M.2</td>
-<td><p class="first">The Adversary is capable of deploying and running software within the boundaries of the system with limited privileges, in order to compromise other parts of the system or gain access to protected assets.</p>
-<p class="last">This includes the use of the PSA Cryptography API, mounting timing attacks, glitching by abusing exposed power control interfaces, and other attacks which are mounted exclusively by running uncompromised software.</p>
-</td>
-</tr>
-<tr class="row-even"><td>M.3</td>
-<td>The Adversary is capable of compromising a target application, in order to extract or manipulate data, or abuse the PSA Cryptography API from the application.</td>
-</tr>
-<tr class="row-odd"><td>M.4</td>
-<td>The Adversary is capable of inducing faults or glitches during the application or cryptoprocessor operation.</td>
-</tr>
-<tr class="row-even"><td>M.5</td>
-<td>The Adversary is capable of performing hardware-assisted side-channel analysis. For example, power analysis, or measurements of EM or photonic emissions.</td>
-</tr>
-</tbody>
-</table>
-<p>The following adversarial models are not considered in this assessment:</p>
-<ul class="simple">
-<li>The Adversary is capable of interposing the memory interface to observe and modify the memory contents.</li>
-<li>The Adversary is capable of performing sophisticated hardware analysis and reverse engineering.</li>
-</ul>
-</div>
-<div class="section" id="threats-and-attacks">
-<h3>Threats and attacks</h3>
-<p><span><a class="reference internal" href="#table-threats"><span class="numref">Table 26</span></a></span> describes threats to the Security Goals, and provides examples of corresponding attacks. This table identifies which Security goals are affected by the attacks, and which Adversarial model or models are required to execute the attack.</p>
-<p>See <a class="reference internal" href="#risk-assessment"><span class="secref">Risk assessment</span></a> for an evaluation of the risks posed by these threats, <a class="reference internal" href="#mitigations"><span class="secref">Mitigations</span></a> for mitigation requirements in the API design, and <a class="reference internal" href="#remediation"><span class="secref">Remediation & residual risk</span></a> for mitigation recommendations in the cryptoprocessor implementation.</p>
-<table border="1" class="colwidths-given longtable docutils align-right" id="table-threats">
-<caption><span class="caption-number">Table 26 </span><span class="caption-text">Threats and attacks</span></caption>
-<colgroup>
-<col width="8%" />
-<col width="20%" />
-<col width="8%" />
-<col width="8%" />
-<col width="56%" />
-</colgroup>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Threat</th>
-<th class="head"> </th>
-<th class="head"> </th>
-<th class="head"> </th>
-<th class="head">Attack (Examples)</th>
-</tr>
-<tr class="row-even"><th class="head">Id</th>
-<th class="head">Description</th>
-<th class="head">Goals</th>
-<th class="head">Models</th>
-<th class="head">Id: Description</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-odd"><td>T.1</td>
-<td>Use of insecure or incorrectly implemented cryptography</td>
-<td>G.1 G.2</td>
-<td>M.1</td>
-<td><p class="first"><strong>A.C1</strong>: Using a cryptographic algorithm that is not adequately secure for the application use case can permit an attacker to recover the application plaintext from attacker-accessible data.</p>
-<p><strong>A.C2</strong>: Using a cryptographic algorithm that is not adequately secure for the application use case can permit an attacker to inject forged authenticated material into application data in transit or in storage.</p>
-<p class="last"><strong>A.C3</strong>: Using an insecure cryptographic algorithm, or one that is incorrectly implemented can permit an attacker to recover the cryptographic key. Key recovery enables the attacker to reveal encrypted plaintexts, and inject forged authenticated data.</p>
-</td>
-</tr>
-<tr class="row-even"><td>T.2</td>
-<td>Misuse of cryptographic algorithms</td>
-<td>G.1 G.2</td>
-<td>M.1</td>
-<td><strong>A.C4</strong>: Reusing a cryptographic key with different algorithms can result in cryptanalysis attacks on the ciphertexts or signatures which enable an attacker to recover the plaintext, or the key itself.</td>
-</tr>
-<tr class="row-odd"><td>T.3</td>
-<td>Recover non-extractable key through the API</td>
-<td>G.3</td>
-<td>M.2 or M.3</td>
-<td><p class="first"><strong>A.C5</strong>: The attacker uses an indirect mechanism provided by the API to extract a key that is not intended to be extractable.</p>
-<p class="last"><strong>A.C6</strong>: The attacker uses a mechanism provided by the API to enable brute-force recovery of a non-extractable key. For example, <span><em>On the Security of PKCS #11</em> <a class="reference internal" href="../about.html#citation-clulow"><span class="cite">[CLULOW]</span></a></span> describes various flaws in the design of the PKCS #11 interface standard that enable an attacker to recover secret and non-extractable keys.</p>
-</td>
-</tr>
-<tr class="row-even"><td>T.4</td>
-<td>Illegal inputs to the API</td>
-<td>G.3 G.4</td>
-<td>M.2 or M.3</td>
-<td><p class="first"><strong>A.60</strong>: Using a pointer to memory that does not belong to the application, in an attempt to make the cryptoprocessor read or write memory that is inaccessible to the application.</p>
-<p><strong>A.70</strong>: Passing out-of-range values, or incorrectly formatted data, to provoke incorrect behavior in the cryptoprocessor.</p>
-<p><strong>A.61</strong>: Providing invalid buffer lengths to cause out-of-bounds read or write access within the cryptoprocessor.</p>
-<p class="last"><strong>A.62</strong>: Call API functions in an invalid sequence to provoke incorrect operation of the cryptoprocessor.</p>
-</td>
-</tr>
-<tr class="row-odd"><td>T.5</td>
-<td>Direct access to cryptoprocessor state</td>
-<td>G.3 G.4</td>
-<td>M.2 or M.3</td>
-<td><p class="first"><strong>A.C7</strong>: Without a cryptoprocessor boundary, an attacker can directly access the cryptoprocessor state from an application. See <span><a class="reference internal" href="#fig-dfd-no-isolation"><span class="numref">Figure 19</span></a></span>.</p>
-<p class="last"><strong>A.C8</strong>: A misconfigured cryptoprocessor boundary can allow an attacker to directly access the cryptoprocessor state from an Application.</p>
-</td>
-</tr>
-<tr class="row-even"><td>T.6</td>
-<td>Access and use another application’s assets</td>
-<td>G.1 G.2</td>
-<td>M.2 or M.3</td>
-<td><p class="first"><strong>A.C9</strong>: Without application boundaries, the cryptoprocessor provides a unified view of the application assets. All keys are accessible to all callers of the PSA Cryptography API. See <span><a class="reference internal" href="#fig-dfd-caller-isolation"><span class="numref">Figure 21</span></a></span>.</p>
-<p class="last"><strong>A.C10</strong>: The attacker can spoof the application identity within a caller-isolated implementation to gain access to another application’s assets.</p>
-</td>
-</tr>
-<tr class="row-odd"><td>T.7</td>
-<td>Data-dependent timing</td>
-<td>G.1 G.3</td>
-<td>M.2 or M.3</td>
-<td><strong>A.C11</strong> Measuring the time for operations in the cryptoprocessor or the application, and using the differential in results to assist in recovery of the key or plaintext.</td>
-</tr>
-<tr class="row-even"><td>T.8</td>
-<td>Memory manipulation</td>
-<td>G.4</td>
-<td>M.4</td>
-<td><strong>A.19</strong>: Corrupt application or cryptoprocessor state via a fault, causing incorrect operation of the cryptoprocessor.</td>
-</tr>
-<tr class="row-odd"><td> </td>
-<td> </td>
-<td> </td>
-<td>M.2 or M.3</td>
-<td><strong>A.59</strong>: Modifying function parameters in memory, while the cryptoprocessor is accessing the parameter memory, to cause incorrect operation of the cryptoprocessor.</td>
-</tr>
-<tr class="row-even"><td>T.9</td>
-<td>Side channels</td>
-<td>G.1 G.3</td>
-<td>M.5</td>
-<td><strong>A.C12</strong> Taking measurements from physical side-channels during cryptoprocessor operation, and using this data to recover keys or plaintext. For example, using power or EM measurements.</td>
-</tr>
-<tr class="row-odd"><td> </td>
-<td> </td>
-<td> </td>
-<td>M.2 or M.3</td>
-<td><strong>A.C13</strong> Taking measurements from shared-resource side-channels during cryptoprocessor operation, and using this data to recover keys or plaintext. For example, attacks using a shared cache.</td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="section" id="risk-assessment">
-<span id="id3"></span><h3>Risk assessment</h3>
-<p>The risk ratings in <span><a class="reference internal" href="#table-risks"><span class="numref">Table 27</span></a></span> follow a version of the risk assessment scheme in <span><em>NIST Special Publication 800-30 Revision 1: Guide for Conducting Risk Assessments</em> <a class="reference internal" href="../about.html#citation-sp800-30"><span class="cite">[SP800-30]</span></a></span>. Likelihood of an attack and its impact are evaluated independently, and then they are combined to obtain the overall risk of the attack.</p>
-<p>The risk assessment is used to prioritize the threats that require mitigation. This helps to identify the mitigations that have the highest priority for implementation. Mitigations are described in <a class="reference internal" href="#mitigations"><span class="secref">Mitigations</span></a> and <a class="reference internal" href="#remediation"><span class="secref">Remediation & residual risk</span></a>.</p>
-<p>It is recommended that this assessment is repeated for a specific implementation or product, taking into consideration the Adversarial models that are within scope, and re-evaluating the impact based on the assets at risk.</p>
-<table border="1" class="colwidths-given longtable docutils align-right" id="table-risks">
-<caption><span class="caption-number">Table 27 </span><span class="caption-text">Risk assessment</span></caption>
-<colgroup>
-<col width="20%" />
-<col width="20%" />
-<col width="20%" />
-<col width="20%" />
-<col width="20%" />
-</colgroup>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Adversarial Model <sup>a</sup></th>
-<th class="head">Threat/Attack</th>
-<th class="head">Likelihood</th>
-<th class="head">Impact <sup>b</sup></th>
-<th class="head">Risk</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>M.1</td>
-<td>T.1</td>
-<td>High</td>
-<td>Medium</td>
-<td>Medium</td>
-</tr>
-<tr class="row-odd"><td>M.1</td>
-<td>T.2</td>
-<td>High</td>
-<td>Medium</td>
-<td>Medium</td>
-</tr>
-<tr class="row-even"><td>M.2 or M.3</td>
-<td>T.3</td>
-<td>Medium</td>
-<td>High</td>
-<td>Medium</td>
-</tr>
-<tr class="row-odd"><td>M.2 or M.3</td>
-<td>T.4</td>
-<td>High</td>
-<td>Medium</td>
-<td>Medium</td>
-</tr>
-<tr class="row-even"><td>M.2 or M.3</td>
-<td>T.5</td>
-<td>High</td>
-<td>Very high</td>
-<td>Very high</td>
-</tr>
-<tr class="row-odd"><td>M.2 or M.3</td>
-<td>T.6</td>
-<td>High</td>
-<td>High</td>
-<td>High</td>
-</tr>
-<tr class="row-even"><td>M.2 or M.3</td>
-<td>T.7</td>
-<td>Medium</td>
-<td>Medium</td>
-<td>Medium</td>
-</tr>
-<tr class="row-odd"><td>M.2 or M.3</td>
-<td>T.8/A.59</td>
-<td>Medium</td>
-<td>Medium</td>
-<td>Medium</td>
-</tr>
-<tr class="row-even"><td>M.4</td>
-<td>T.8/A.19</td>
-<td>Low</td>
-<td>Medium</td>
-<td>Low</td>
-</tr>
-<tr class="row-odd"><td>M.5</td>
-<td>T.9/A.C12</td>
-<td>Low</td>
-<td>High</td>
-<td>Medium</td>
-</tr>
-<tr class="row-even"><td>M.2 or M.3</td>
-<td>T.9/A.C12</td>
-<td>Medium</td>
-<td>High</td>
-<td>Medium</td>
-</tr>
-</tbody>
-</table>
-<ol class="loweralpha simple">
-<li>This repeats the association in <span><a class="reference internal" href="#table-threats"><span class="numref">Table 26</span></a></span> between an Adversarial model and the Threats that it enables. This aids filtering of the assessment based on the models that are in scope for a specific implementation.</li>
-<li>The impact of an attack is dependent on the impact of the disclosure or modification of the application data that is cryptographically protected. This is ultimately determined by the requirements and risk assessment for the product which is using this API. <span><a class="reference internal" href="#table-risks"><span class="numref">Table 27</span></a></span> allocates the impact as follows:<ul>
-<li>‘Medium’ if unspecified cryptoprocessor state or application data assets are affected.</li>
-<li>‘High’ if an application’s cryptographic assets are affected.</li>
-<li>‘Very High’ if all cryptoprocessor assets are affected.</li>
-</ul>
-</li>
-</ol>
-</div>
-</div>
-<div class="section" id="mitigations">
-<span id="id4"></span><h2>Mitigations</h2>
-<div class="section" id="objectives">
-<h3>Objectives</h3>
-<p>The objectives in <span><a class="reference internal" href="#table-objectives"><span class="numref">Table 28</span></a></span> are a high-level description of what the design must achieve in order to mitigate the threats. Detailed requirements that describe how the API or cryptoprocessor implementation can deliver the objectives are provided in <a class="reference internal" href="#mitigation-requirements"><span class="secref">Requirements</span></a> and <a class="reference internal" href="#remediation"><span class="secref">Remediation & residual risk</span></a>.</p>
-<table border="1" class="colwidths-given longtable docutils align-right" id="table-objectives">
-<caption><span class="caption-number">Table 28 </span><span class="caption-text">Mitigation objectives</span></caption>
-<colgroup>
-<col width="8%" />
-<col width="54%" />
-<col width="38%" />
-</colgroup>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Id</th>
-<th class="head">Description</th>
-<th class="head">Threats addressed</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>O.1</td>
-<td>Hide keys from the application</td>
-<td> </td>
-</tr>
-<tr class="row-odd"><td> </td>
-<td>Keys are never directly manipulated by application software. Instead keys are referred to by handle, removing the need to deal with sensitive key material inside applications. This form of API is also suitable for secure elements, based on tamper-resistant hardware, that never reveal cryptographic keys.</td>
-<td><p class="first">T.1 T.2 T.3 — see <a class="reference internal" href="../overview/goals.html#keystore"><span class="secref">A keystore interface</span></a>.</p>
-<p class="last">T.5 T.6 — to mitigate T.5 and T.6, the implementation must provide some form of isolation. See <a class="reference internal" href="../overview/goals.html#isolation"><span class="secref">Optional isolation</span></a>.</p>
-</td>
-</tr>
-<tr class="row-even"><td>O.2</td>
-<td>Limit key usage</td>
-<td> </td>
-</tr>
-<tr class="row-odd"><td> </td>
-<td>Associate each key with a policy that limits the use of the key. The policy is defined by the application when the key is created, after which it is immutable.</td>
-<td>T.2 T.3 — see <a class="reference internal" href="../api/keys/policy.html#key-policy"><span class="secref">Key policies</span></a>.</td>
-</tr>
-<tr class="row-even"><td>O.3</td>
-<td>Best-practice cryptography</td>
-<td> </td>
-</tr>
-<tr class="row-odd"><td> </td>
-<td>An application developer-oriented API to achieve practical cryptography: the PSA Cryptography API offers services that are oriented towards the application of cryptographic methods like encrypt, sign, verify. This enables the implementation to focus on best-practice implementation of the cryptographic primitive, and the application developer on correct selection and use of those primitives.</td>
-<td>T.1 T.2 T.7 T.8 — see <a class="reference internal" href="../overview/goals.html#usability"><span class="secref">Ease of use</span></a>.</td>
-</tr>
-<tr class="row-even"><td>O.4</td>
-<td>Algorithm agility</td>
-<td> </td>
-</tr>
-<tr class="row-odd"><td> </td>
-<td>Cryptographic functions are not tied to a specific cryptographic algorithm. Primitives are designated at run-time. This simplifies updating an application to use a more secure algorithm, and makes it easier to implement dynamic selection of cryptographic algorithms within an application.</td>
-<td>T.1 — see <a class="reference internal" href="../overview/goals.html#algorithm-agility"><span class="secref">Choice of algorithms</span></a>.</td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="section" id="requirements">
-<span id="mitigation-requirements"></span><h3>Requirements</h3>
-<p>The design of the API can mitigate, or enable a cryptoprocessor to mitigate, some of the identified attacks. <span><a class="reference internal" href="#tab-security-requirements"><span class="numref">Table 29</span></a></span> describes these mitigations. Mitigations that are delegated to the cryptoprocessor or application are described in <a class="reference internal" href="#remediation"><span class="secref">Remediation & residual risk</span></a>.</p>
-<table border="1" class="colwidths-given longtable docutils align-right" id="tab-security-requirements">
-<caption><span class="caption-number">Table 29 </span><span class="caption-text">Security requirements</span></caption>
-<colgroup>
-<col width="8%" />
-<col width="31%" />
-<col width="31%" />
-<col width="31%" />
-</colgroup>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Id</th>
-<th class="head">Description</th>
-<th class="head">API impact</th>
-<th class="head">Threats/attacks addressed</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>SR.1 (O.1)</td>
-<td>Key values are not exposed by the API, except when importing or exporting a key.</td>
-<td>The full key policy must be provided at the time a key is created. See <a class="reference internal" href="../overview/functionality.html#key-overview"><span class="secref">Key management</span></a>.</td>
-<td>T.3/A.C5 — key values are hidden by the API.</td>
-</tr>
-<tr class="row-odd"><td>SR.2 (O.2)</td>
-<td>The policy for a key must be set when the key is created, and be immutable afterward.</td>
-<td>The full key policy must be provided at the time a key is created. See <a class="reference internal" href="../api/keys/attributes.html#c.psa_key_attributes_t" title="psa_key_attributes_t"><code class="xref any c c-type docutils literal"><span class="pre">psa_key_attributes_t</span></code></a>.</td>
-<td><p class="first">T.3/A.C5 — once created, the key usage permissions cannot be changed to permit export.</p>
-<p class="last">T.2/A.C4— once created, a key cannot be repurposed by changing its policy.</p>
-</td>
-</tr>
-<tr class="row-even"><td>SR.3 (O.2)</td>
-<td>The key policy must control the algorithms that the key can be used with, and the functions of the API that the key can be used with.</td>
-<td>The key policy must include usage permissions, and permitted-algorithm attributes. See <a class="reference internal" href="../api/keys/policy.html#key-policy"><span class="secref">Key policies</span></a>.</td>
-<td>T.2/A.C4 — a key cannot be reused with different algorithms.</td>
-</tr>
-<tr class="row-odd"><td>SR.4 (O.1)</td>
-<td>Key export must be controlled by the key policy.</td>
-<td>See <a class="reference internal" href="../api/keys/policy.html#c.PSA_KEY_USAGE_EXPORT" title="PSA_KEY_USAGE_EXPORT"><code class="xref any c c-macro docutils literal"><span class="pre">PSA_KEY_USAGE_EXPORT</span></code></a>.</td>
-<td>T.3/A.C5 — a key can only be extracted from the cryptoprocessor if explicitly permitted by the key creator.</td>
-</tr>
-<tr class="row-even"><td>SR.5 (O.1)</td>
-<td>The policy of a copied key must not provide rights that are not permitted by the original key policy.</td>
-<td>See <a class="reference internal" href="../api/keys/management.html#c.psa_copy_key" title="psa_copy_key"><code class="xref any c c-func docutils literal"><span class="pre">psa_copy_key()</span></code></a>.</td>
-<td><p class="first">T.3/A.C5 — a copy of a key cannot be exported if the original could not be exported.</p>
-<p class="last">T.3/A.C4 — a copy of a key cannot be used in different algorithm to the original.</p>
-</td>
-</tr>
-<tr class="row-odd"><td>SR.6 (O.3)</td>
-<td>Unless explicitly required by the use case, the API must not define cryptographic algorithms with known security weaknesses. If possible, deprecated algorithms should not be included.</td>
-<td>Algorithm inclusion is based on use cases. Warnings are provided for algorithms and operations with known security weaknesses, and recommendations made to use alternative algorithms.</td>
-<td>T.1/A.C1 A.C2 A.C3</td>
-</tr>
-<tr class="row-even"><td>SR.7 (O.4)</td>
-<td>The API design must make it easy to change to a different algorithm of the same type.</td>
-<td>Cryptographic operation functions select the specific algorithm based on parameters passed at runtime. See <a class="reference internal" href="../api/keys/types.html#key-types"><span class="secref">Key types</span></a> and <a class="reference internal" href="../api/ops/algorithms.html#algorithms"><span class="secref">Algorithms</span></a>.</td>
-<td>T.1/A.C1 A.C2 A.C3</td>
-</tr>
-<tr class="row-odd"><td>SR.8 (O.1)</td>
-<td>Key derivation functions that expose part of the key value, or make part of the key value easily recoverable, must not be provided in the API.</td>
-<td> </td>
-<td>T.3/A.C6</td>
-</tr>
-<tr class="row-even"><td>SR.9 (O.3)</td>
-<td>Constant values defined by the API must be designed to resist bit faults.</td>
-<td><p class="first">Key type values explicitly consider single-bit faults, see <a class="reference internal" href="encodings.html#key-type-encoding"><span class="secref">Key type encoding</span></a>. <sup>a</sup></p>
-<p class="last">Success and error status codes differ by multiple bits, see <a class="reference internal" href="../api/library/status.html#status-codes"><span class="secref">PSA status codes</span></a>. <sup>b</sup></p>
-</td>
-<td>T.8/A.19 — enablement only, mitigation is delegated to the implementation.</td>
-</tr>
-<tr class="row-odd"><td>SR.10 (O.3)</td>
-<td>The API design must permit the implementation of operations with data-independent timing.</td>
-<td>Provision of comparison functions for MAC, hash and key derivation operations.</td>
-<td>T.7/A.C11 — enablement only, mitigation is delegated to the implementation.</td>
-</tr>
-<tr class="row-even"><td>SR.11 (O.3)</td>
-<td>Specify behavior for memory shared between the application and cryptoprocessor, including where multiple parameters overlap.</td>
-<td>Standardize the result when parameters overlap, see <a class="reference internal" href="../overview/conventions.html#buffer-overlap"><span class="secref">Overlap between parameters</span></a>.</td>
-<td>T.8/A.59 — enablement only, mitigation is delegated to the implementation.</td>
-</tr>
-<tr class="row-odd"><td>SR.12 (O.1) (O.2)</td>
-<td>The API must permit the implementation to isolate the cryptoprocessor, to prevent access to keys without using the API.</td>
-<td>No use of shared memory between application and cryptoprocessor, except as function parameters.</td>
-<td>T.5/A.C7 — enablement only, mitigation is delegated to the implementation.</td>
-</tr>
-<tr class="row-even"><td>SR.13 (O.3)</td>
-<td>The API design must permit the implementation of operations using mitigation techniques that resist side-channel attacks.</td>
-<td><p class="first">Operations that use random blinding to resist side-channel attacks, can return RNG-specific error codes.</p>
-<p class="last">See also SR.12, which enables the cryptoprocessor to be fully isolated, and implemented within a separate security processor.</p>
-</td>
-<td>T.9 — enablement only, mitigation is delegated to the implementation.</td>
-</tr>
-</tbody>
-</table>
-<ol class="loweralpha simple">
-<li>Limited resistance to bit faults is still valuable in systems where memory may be susceptible to single-bit flip attacks, for example, Rowhammer on some types of DRAM.</li>
-<li>Unlike key type values, algorithm identifiers used in cryptographic operations are verified against a the permitted-algorithm in the key policy. This provides a mitigation for a bit fault in an algorithm identifier value, without requiring error detection within the algorithm identifier itself.</li>
-</ol>
-</div>
-</div>
-<div class="section" id="remediation-residual-risk">
-<span id="remediation"></span><h2>Remediation & residual risk</h2>
-<div class="section" id="implementation-remediations">
-<h3>Implementation remediations</h3>
-<p><span><a class="reference internal" href="#tab-remediation"><span class="numref">Table 30</span></a></span> includes all recommended remediations for an implementation, assuming the full adversarial model described in <a class="reference internal" href="#adversarial-models"><span class="secref">Adversarial models</span></a>. When an implementation has a subset of the adversarial models, then individual remediations can be excluded from an implementation, if the associated threat is not relevant for that implementation.</p>
-<table border="1" class="colwidths-given longtable docutils align-right" id="tab-remediation">
-<caption><span class="caption-number">Table 30 </span><span class="caption-text">Implementation remediations</span></caption>
-<colgroup>
-<col width="8%" />
-<col width="31%" />
-<col width="62%" />
-</colgroup>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Id</th>
-<th class="head">Identified gap</th>
-<th class="head">Suggested remediation</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>R.1 (O.1) (O.3)</td>
-<td>T.5 — direct access to cryptoprocessor state.</td>
-<td>The cryptoprocessor implementation provides <a class="reference internal" href="../about.html#term-cryptoprocessor-isolation"><span class="term">cryptoprocessor isolation</span></a> or <a class="reference internal" href="../about.html#term-caller-isolation"><span class="term">caller isolation</span></a>, to isolate the application from the cryptoprocessor state, and from volatile and persistent key material.</td>
-</tr>
-<tr class="row-odd"><td>R.2 (O.1) (O.3)</td>
-<td>T.6 — access and use another application’s assets.</td>
-<td><p class="first">The cryptoprocessor implementation provides <a class="reference internal" href="../about.html#term-caller-isolation"><span class="term">caller isolation</span></a>, and maintains separate cryptoprocessor state for each application. Each application must only be able to access its own keys and ongoing operations.</p>
-<p class="last">Caller isolation requires that the implementation can securely identify the caller of the PSA Cryptography API.</p>
-</td>
-</tr>
-<tr class="row-even"><td>R.3 (O.3)</td>
-<td>T.4/A.60 A.61 — using illegal memory inputs.</td>
-<td>The cryptoprocessor implementation validates that memory buffers provided by the application are accessible by the application.</td>
-</tr>
-<tr class="row-odd"><td>R.4 (O.3)</td>
-<td>T.4/A.70 — providing invalid formatted data.</td>
-<td>The cryptoprocessor implementation checks that imported key data is valid before use.</td>
-</tr>
-<tr class="row-even"><td>R.5 (O.3)</td>
-<td>T.4/A.62 — call the API in an invalid operation sequence.</td>
-<td>The cryptoprocessor implementation enforces the correct sequencing of calls in multi-part operations. See <a class="reference internal" href="../overview/functionality.html#multi-part-operations"><span class="secref">Multi-part operations</span></a>.</td>
-</tr>
-<tr class="row-odd"><td>R.6 (O.1) (O.3)</td>
-<td>T.3/A.C5 A.C6 — indirect key disclosure via the API.</td>
-<td>Cryptoprocessor implementation-specific extensions to the API must avoid providing mechanisms that can extract or recover key values, such as trivial key derivation algorithms.</td>
-</tr>
-<tr class="row-even"><td>R.8 (O.3)</td>
-<td>T.8/A.59 — concurrent modification of parameter memory.</td>
-<td>The cryptoprocessor implementation treats application memory as untrusted and volatile, typically by not reading the same memory location twice. See <a class="reference internal" href="../overview/conventions.html#stability-of-parameters"><span class="secref">Stability of parameters</span></a>.</td>
-</tr>
-<tr class="row-odd"><td>R.9 (O.3)</td>
-<td>T.2/A.C4 — incorrect cryptographic parameters.</td>
-<td>The cryptoprocessor implementation validates the key attributes and other parameters used for a cryptographic operation, to ensure these conform to the API specification and to the specification of the algorithm itself.</td>
-</tr>
-<tr class="row-even"><td>R.10 (O.3)</td>
-<td>T.1/A.C1 A.C2 A.C3 — insecure cryptographic algorithms.</td>
-<td>The cryptoprocessor does not support deprecated cryptographic algorithms, unless justified by specific use case requirements.</td>
-</tr>
-<tr class="row-odd"><td>R.11 (O.3)</td>
-<td>T.7/A.C11 — data-independent timing.</td>
-<td>The cryptoprocessor implements cryptographic operations with data-independent timing.</td>
-</tr>
-<tr class="row-even"><td>R.12 (O.3)</td>
-<td>T.9 — side-channels.</td>
-<td>The cryptoprocessor implements resistance to side-channels.</td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="section" id="residual-risk">
-<h3>Residual risk</h3>
-<p><span><a class="reference internal" href="#tab-residual-risk"><span class="numref">Table 31</span></a></span> describes the remaining risks that cannot be mitigated fully by the API or cryptoprocessor implementation. Responsibility for managing these risks lies with the application developers and system integrators.</p>
-<table border="1" class="colwidths-given longtable docutils align-right" id="tab-residual-risk">
-<caption><span class="caption-number">Table 31 </span><span class="caption-text">Residual risk</span></caption>
-<colgroup>
-<col width="8%" />
-<col width="31%" />
-<col width="62%" />
-</colgroup>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Id</th>
-<th class="head">Threat/attack</th>
-<th class="head">Suggested remediations</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>RR.1</td>
-<td>T.1</td>
-<td>Selection of appropriately secure protocols, algorithms and key sizes is the responsibility of the application developer.</td>
-</tr>
-<tr class="row-odd"><td>RR.2</td>
-<td>T.5</td>
-<td>Correct isolation of the cryptoprocessor is the responsibility of the cryptoprocessor and system implementation.</td>
-</tr>
-<tr class="row-even"><td>RR.3</td>
-<td>T.6</td>
-<td>Correct identification of the application client is the responsibility of the cryptoprocessor and system implementation.</td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper"><h3><a href="../index.html"><b>PSA Crypto API</b></a></h3>
-IHI 0086<br/>
-Non-confidential<br/>
-Version 1.1.0
-<span style="color: red; font-weight: bold;"></span>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="../about.html">About this document</a></li>
-</ul>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="../overview/intro.html">1. Introduction</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/goals.html">2. Design goals</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/functionality.html">3. Functionality overview</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/sample-arch.html">4. Sample architectures</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/conventions.html">5. Library conventions</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/implementation.html">6. Implementation considerations</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../overview/usage.html">7. Usage considerations</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api/library/index.html">8. Library management reference</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api/keys/index.html">9. Key management reference</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api/ops/index.html">10. Cryptographic operation reference</a></li>
-</ul>
-<ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="example_header.html">Example header file</a></li>
-<li class="toctree-l1"><a class="reference internal" href="encodings.html">Algorithm and key type encoding</a></li>
-<li class="toctree-l1"><a class="reference internal" href="specdef_values.html">Example macro implementations</a></li>
-<li class="toctree-l1 current"><a class="current reference internal" href="#">Security Risk Assessment</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#architecture">Architecture</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="#system-definition">System definition</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#assets-and-stakeholders">Assets and stakeholders</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#security-goals">Security goals</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="#threat-model">Threat Model</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="#adversarial-models">Adversarial models</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#threats-and-attacks">Threats and attacks</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#risk-assessment">Risk assessment</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="#mitigations">Mitigations</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="#objectives">Objectives</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#requirements">Requirements</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="#remediation-residual-risk">Remediation & residual risk</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="#implementation-remediations">Implementation remediations</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#residual-risk">Residual risk</a></li>
-</ul>
-</li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="history.html">Changes to the API</a></li>
-</ul>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="../psa_c-identifiers.html">Index of API elements</a></li>
-</ul>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="footer">
- © 2018-2022, Arm Limited or its affiliates. All rights reserved.
-
- |
- Powered by <a href="http://sphinx-doc.org/">Sphinx 1.6.7</a>
- & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
-
- </div>
-
-
-
-
- </body>
-</html>
\ No newline at end of file
+<meta http-equiv="Refresh" content="0; url='https://arm-software.github.io/psa-api/crypto/1.1/appendix/sra.html'" />