blob: 9c3dfb661956153614d77a2d92dcb41534961c74 [file] [log] [blame]
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="An operation for conducting authenticated encryption &#x2F; decryption."><meta name="keywords" content="rust, rustlang, rust-lang, AE"><title>AE in optee_utee::crypto_op - Rust</title><link rel="stylesheet" type="text/css" href="../../normalize.css"><link rel="stylesheet" type="text/css" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../ayu.css" disabled ><script id="default-settings" ></script><script src="../../storage.js"></script><script src="../../crates.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../favicon.svg"><style type="text/css">#crate-search{background-image:url("../../down-arrow.svg");}</style></head><body class="rustdoc struct"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../optee_utee/index.html'><div class='logo-container rust-logo'><img src='../../rust-logo.png' alt='logo'></div></a><h2 class="location">Struct AE</h2><div class="sidebar-elems"><div class="block items"><h3 class="sidebar-title"><a href="#implementations">Methods</a></h3><div class="sidebar-links"><a href="#method.allocate">allocate</a><a href="#method.copy">copy</a><a href="#method.decrypt_final">decrypt_final</a><a href="#method.encrypt_final">encrypt_final</a><a href="#method.info">info</a><a href="#method.info_multiple">info_multiple</a><a href="#method.init">init</a><a href="#method.null">null</a><a href="#method.reset">reset</a><a href="#method.set_key">set_key</a><a href="#method.update">update</a><a href="#method.update_aad">update_aad</a></div><h3 class="sidebar-title"><a href="#trait-implementations">Trait Implementations</a></h3><div class="sidebar-links"><a href="#impl-OpHandle">OpHandle</a></div><h3 class="sidebar-title"><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><div class="sidebar-links"><a href="#impl-RefUnwindSafe">RefUnwindSafe</a><a href="#impl-Send">!Send</a><a href="#impl-Sync">!Sync</a><a href="#impl-Unpin">Unpin</a><a href="#impl-UnwindSafe">UnwindSafe</a></div><h3 class="sidebar-title"><a href="#blanket-implementations">Blanket Implementations</a></h3><div class="sidebar-links"><a href="#impl-Any">Any</a><a href="#impl-Borrow%3CT%3E">Borrow&lt;T&gt;</a><a href="#impl-BorrowMut%3CT%3E">BorrowMut&lt;T&gt;</a><a href="#impl-From%3CT%3E">From&lt;T&gt;</a><a href="#impl-Into%3CU%3E">Into&lt;U&gt;</a><a href="#impl-TryFrom%3CU%3E">TryFrom&lt;U&gt;</a><a href="#impl-TryInto%3CU%3E">TryInto&lt;U&gt;</a></div></div><h2 class="location">Other items in<br><a href="../index.html">optee_utee</a>::<wbr><a href="index.html">crypto_op</a></h2><div id="sidebar-vars" data-name="AE" data-ty="struct" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="18" height="18" alt="Pick another theme!" src="../../brush.svg"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"></div><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../../settings.html" title="settings"><img width="18" height="18" alt="Change settings" src="../../wheel.svg"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Struct <a href="../index.html">optee_utee</a>::<wbr><a href="index.html">crypto_op</a>::<wbr><a class="struct" href="#">AE</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../../clipboard.svg" width="19" height="18" alt="Copy item path"></button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../src/optee_utee/crypto_op.rs.html#932" title="goto source code">[src]</a></span></h1><div class="docblock type-decl"><pre class="rust struct"><code>pub struct AE(_);</code></pre></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>An operation for conducting authenticated encryption / decryption.</p>
</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor"></a></h2><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/crypto_op.rs.html#934-1206" title="goto source code">[src]</a></div><a href="#impl" class="anchor"></a><h3 class="code-header in-band">impl <a class="struct" href="struct.AE.html" title="struct optee_utee::crypto_op::AE">AE</a></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.init" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/crypto_op.rs.html#959-979" title="goto source code">[src]</a></div><a href="#method.init" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.init" class="fnname">init</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self, <br>&nbsp;&nbsp;&nbsp;&nbsp;nonce: &amp;[u8], <br>&nbsp;&nbsp;&nbsp;&nbsp;tag_len: usize, <br>&nbsp;&nbsp;&nbsp;&nbsp;aad_len: usize, <br>&nbsp;&nbsp;&nbsp;&nbsp;pay_load_len: usize<br>) -&gt; <a class="type" href="../type.Result.html" title="type optee_utee::Result">Result</a>&lt;()&gt;</h4></div></summary><div class="docblock"><p>Initialize an AE opeartion.
The operation must be in the initial state and remains in the initial state afterwards.</p>
<h1 id="parameters" class="section-header"><a href="#parameters">Parameters</a></h1>
<ol>
<li><code>nonce</code>: The peration nonce or IV</li>
<li><code>tag_len</code>: Size in bits of the tag:
2.1) for <code>AES-GCM</code>, can be 128, 120, 112, 104, or 96;
2.2) for <code>AES-CCM</code>, can be 128, 112, 96, 80, 64, 48, or 32.</li>
<li><code>aad_len</code>: length in bytes of the AAD (Used only for AES-CCM. Ignored for AES-GCM).</li>
<li><code>pay_load_len</code>: Length in bytes of the payload (Used only for AES-CCM. Ignored for AES-GCM).</li>
</ol>
<h1 id="errors" class="section-header"><a href="#errors">Errors</a></h1>
<ol>
<li><code>NotSupported</code>: If the <code>tag_len</code> is not supported by the algorithm.</li>
</ol>
<h1 id="panics" class="section-header"><a href="#panics">Panics</a></h1>
<ol>
<li>If the algorithm is not a valid algorithm for <code>AE</code>.</li>
<li>If no key is programmed in the operation.</li>
<li>If the nonce length is not compatible with the length required by the algorithm.</li>
<li>If operation is not in initial state.</li>
<li>Hardware or cryptographic algorithm failure.</li>
<li>If the Implementation detects any other error.</li>
</ol>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.update_aad" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/crypto_op.rs.html#997-1001" title="goto source code">[src]</a></div><a href="#method.update_aad" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.update_aad" class="fnname">update_aad</a>(&amp;self, aad_data: &amp;[u8])</h4></div></summary><div class="docblock"><p>Feed a new chunk of Additional Authentication Data (AAD) to the AE operation.
Subsequent calls to this function are possible.
The operation SHALL be in initial state and remains in initial state afterwards.</p>
<h1 id="parameters-1" class="section-header"><a href="#parameters-1">Parameters</a></h1>
<ol>
<li><code>aad_data</code>: Input buffer containing the chunk of AAD.</li>
</ol>
<h1 id="panics-1" class="section-header"><a href="#panics-1">Panics</a></h1>
<ol>
<li>If the algorithm is not a valid algorithm for <code>AE</code>.</li>
<li>If the function is called before <a href="struct.AE.html#method.init">init</a> or has been finalized.</li>
<li>For <code>AES-CCM</code>, if the <code>aad_data.len()</code> exceeds the requirement.</li>
<li>If operation is not in initial state.</li>
<li>Hardware or cryptographic algorithm failure.</li>
<li>If the Implementation detects any other error.</li>
</ol>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.update" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/crypto_op.rs.html#1026-1042" title="goto source code">[src]</a></div><a href="#method.update" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.update" class="fnname">update</a>(&amp;self, src: &amp;[u8], dest: &amp;mut [u8]) -&gt; <a class="type" href="../type.Result.html" title="type optee_utee::Result">Result</a>&lt;usize&gt;</h4></div></summary><div class="docblock"><p>Accumulate data for an Authentication Encryption operation.
Input data does not have to be a multiple of block size. Subsequent calls to this function are possible.
Unless one or more calls of this function have supplied sufficient input data, no output is generated.
The buffers <code>src</code> and <code>dest</code> SHALL be either completely disjoint or equal in their starting positions.
The operation may be in either initial or active state and enters active state afterwards if <code>src.len()</code> != 0.</p>
<h1 id="parameters-2" class="section-header"><a href="#parameters-2">Parameters</a></h1>
<ol>
<li><code>src</code>: Input data buffer to be encrypted or decrypted.</li>
<li><code>dest</code>: Output buffer.</li>
</ol>
<h1 id="errors-1" class="section-header"><a href="#errors-1">Errors</a></h1>
<p><code>ShortBuffer</code>: If the output buffer is not large enough to contain the output.</p>
<h1 id="panics-2" class="section-header"><a href="#panics-2">Panics</a></h1>
<ol>
<li>If the algorithm is not a valid algorithm for <code>AE</code>.</li>
<li>If the function is called before <a href="struct.AE.html#method.init">init</a> or has been finalized.</li>
<li>For <code>AES-CCM</code>, if the AAD length exceeds the requirement.</li>
<li>For <code>AES-CCM</code>, if the payload length is exceeds the requirement.</li>
<li>Hardware or cryptographic algorithm failure.</li>
<li>If the Implementation detects any other error.</li>
</ol>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.encrypt_final" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/crypto_op.rs.html#1100-1124" title="goto source code">[src]</a></div><a href="#method.encrypt_final" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.encrypt_final" class="fnname">encrypt_final</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self, <br>&nbsp;&nbsp;&nbsp;&nbsp;src: &amp;[u8], <br>&nbsp;&nbsp;&nbsp;&nbsp;dest: &amp;mut [u8], <br>&nbsp;&nbsp;&nbsp;&nbsp;tag: &amp;mut [u8]<br>) -&gt; <a class="type" href="../type.Result.html" title="type optee_utee::Result">Result</a>&lt;(usize, usize)&gt;</h4></div></summary><div class="docblock"><p>Process data that has not been processed by previous calls to <a href="struct.AE.html#method.update">update</a> as well as data supplied in <code>src</code>.
It completes the AE operation and computes the tag.
The buffers <code>src</code> and <code>dest</code> SHALL be either completely disjoint or equal in their starting positions.
The operation may be in either initial or active state and enters initial state afterwards.</p>
<h1 id="parameters-3" class="section-header"><a href="#parameters-3">Parameters</a></h1>
<ol>
<li><code>src</code>: Reference to final chunk of input data to be encrypted.</li>
<li><code>dest</code>: Output buffer. Can be omitted if the output is to be discarded, e.g. because it is known to be empty.</li>
<li><code>tag</code>: Output buffer filled with the computed tag.</li>
</ol>
<h1 id="example" class="section-header"><a href="#example">Example</a></h1>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let</span> <span class="ident">key</span> <span class="op">=</span> [<span class="number">0xa5u8</span>; <span class="number">16</span>];
<span class="kw">let</span> <span class="ident">nonce</span> <span class="op">=</span> [<span class="number">0x00u8</span>; <span class="number">16</span>];
<span class="kw">let</span> <span class="ident">aad</span> <span class="op">=</span> [<span class="number">0xffu8</span>; <span class="number">16</span>];
<span class="kw">let</span> <span class="ident">clear1</span> <span class="op">=</span> [<span class="number">0x5au8</span>; <span class="number">19</span>];
<span class="kw">let</span> <span class="ident">clear2</span> <span class="op">=</span> [<span class="number">0xa5u8</span>; <span class="number">13</span>];
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">ciph1</span> <span class="op">=</span> [<span class="number">0x00u8</span>; <span class="number">16</span>];
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">ciph2</span> <span class="op">=</span> [<span class="number">0x00u8</span>; <span class="number">16</span>];
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">tag</span> <span class="op">=</span> [<span class="number">0x00u8</span>; <span class="number">16</span>];
<span class="kw">match</span> <span class="ident">AE::allocate</span>(<span class="ident">AlgorithmId::AesCcm</span>, <span class="ident">OperationMode::Encrypt</span>, <span class="number">128</span>) {
<span class="prelude-val">Ok</span>(<span class="ident">operation</span>) <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">match</span> <span class="ident">TransientObject::allocate</span>(<span class="ident">TransientObjectType::Aes</span>, <span class="number">128</span>) {
<span class="prelude-val">Ok</span>(<span class="ident">key_object</span>) <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">attr</span> <span class="op">=</span> <span class="ident">Attributememref::from_ref</span>(<span class="ident">Attributeid::SecretValue</span>, <span class="kw-2">&amp;</span><span class="ident">key</span>);
<span class="ident">key_object</span>.<span class="ident">populat</span>(<span class="kw-2">&amp;</span>[<span class="ident">attr</span>.<span class="ident">into</span>()])<span class="question-mark">?</span>;
<span class="ident">operation</span>.<span class="ident">set_key</span>(<span class="kw-2">&amp;</span><span class="ident">key_object</span>)<span class="question-mark">?</span>;
<span class="ident">operation</span>.<span class="ident">init</span>(<span class="kw-2">&amp;</span><span class="ident">nonce</span>, <span class="number">128</span>, <span class="number">16</span>, <span class="number">32</span>)<span class="question-mark">?</span>;
<span class="ident">operation</span>.<span class="ident">update_aad</span>(<span class="kw-2">&amp;</span><span class="ident">aad</span>);
<span class="ident">operation</span>.<span class="ident">update</span>(<span class="kw-2">&amp;</span><span class="ident">clear1</span>, <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">ciph1</span>)<span class="question-mark">?</span>;
<span class="kw">match</span> <span class="ident">operation</span>.<span class="ident">encrypt_final</span>(<span class="kw-2">&amp;</span><span class="ident">clear2</span>, <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">ciph2</span>) {
<span class="prelude-val">Ok</span>((<span class="ident">_ciph_len</span>, <span class="ident">_tag_len</span>)) <span class="op">=</span><span class="op">&gt;</span> {
<span class="comment">// ...</span>
<span class="prelude-val">Ok</span>(()),
}
<span class="prelude-val">Err</span>(<span class="ident">e</span>) <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Err</span>(<span class="ident">e</span>),
}
<span class="prelude-val">Err</span>(<span class="ident">e</span>) <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Err</span>(<span class="ident">e</span>),
}
<span class="prelude-val">Err</span>(<span class="ident">e</span>) <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Err</span>(<span class="ident">e</span>),
}</code></pre></div>
<h1 id="errors-2" class="section-header"><a href="#errors-2">Errors</a></h1>
<p><code>ShortBuffer</code>: If the output tag buffer is not large enough to contain the output.</p>
<h1 id="panics-3" class="section-header"><a href="#panics-3">Panics</a></h1>
<ol>
<li>If the algorithm is not a valid algorithm for <code>AE</code>.</li>
<li>If the function is called before <a href="struct.AE.html#method.init">init</a> or has been finalized.</li>
<li>If the required payload length is known but has not been provided.</li>
<li>Hardware or cryptographic algorithm failure.</li>
<li>If the Implementation detects any other error.</li>
</ol>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.decrypt_final" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/crypto_op.rs.html#1149-1167" title="goto source code">[src]</a></div><a href="#method.decrypt_final" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.decrypt_final" class="fnname">decrypt_final</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self, <br>&nbsp;&nbsp;&nbsp;&nbsp;src: &amp;[u8], <br>&nbsp;&nbsp;&nbsp;&nbsp;dest: &amp;mut [u8], <br>&nbsp;&nbsp;&nbsp;&nbsp;tag: &amp;[u8]<br>) -&gt; <a class="type" href="../type.Result.html" title="type optee_utee::Result">Result</a>&lt;usize&gt;</h4></div></summary><div class="docblock"><p>Process data that has not been processed by previous calls to <a href="struct.AE.html#method.update">update</a> as well as data supplied in <code>src</code>.
It completes the AE operation and computes the tag.
The buffers <code>src</code> and <code>dest</code> SHALL be either completely disjoint or equal in their starting positions.
The operation may be in either initial or active state and enters initial state afterwards.</p>
<h1 id="parameters-4" class="section-header"><a href="#parameters-4">Parameters</a></h1>
<ol>
<li><code>src</code>: Reference to final chunk of input data to be decrypted.</li>
<li><code>dest</code>: Output buffer. Can be omitted if the output is to be discarded, e.g. because it is known to be empty.</li>
<li><code>tag</code>: Input buffer containing the tag to compare.</li>
</ol>
<h1 id="errors-3" class="section-header"><a href="#errors-3">Errors</a></h1>
<p><code>ShortBuffer</code>: If the output buffer is not large enough to contain the output.
<code>MacInvalid</code>: If the computed tag does not match the supplied tag.</p>
<h1 id="panics-4" class="section-header"><a href="#panics-4">Panics</a></h1>
<ol>
<li>If the algorithm is not a valid algorithm for <code>AE</code>.</li>
<li>If the function is called before <a href="struct.AE.html#method.init">init</a> or has been finalized.</li>
<li>If the required payload length is known but has not been provided.</li>
<li>Hardware or cryptographic algorithm failure.</li>
<li>If the Implementation detects any other error.</li>
</ol>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.null" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/crypto_op.rs.html#1170-1172" title="goto source code">[src]</a></div><a href="#method.null" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.null" class="fnname">null</a>() -&gt; Self</h4></div></summary><div class="docblock"><p>Create an AE operation without any specific algorithm or other data.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.allocate" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/crypto_op.rs.html#1175-1180" title="goto source code">[src]</a></div><a href="#method.allocate" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.allocate" class="fnname">allocate</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;algo: <a class="enum" href="enum.AlgorithmId.html" title="enum optee_utee::crypto_op::AlgorithmId">AlgorithmId</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;mode: <a class="enum" href="enum.OperationMode.html" title="enum optee_utee::crypto_op::OperationMode">OperationMode</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;max_key_size: usize<br>) -&gt; <a class="type" href="../type.Result.html" title="type optee_utee::Result">Result</a>&lt;Self&gt;</h4></div></summary><div class="docblock"><p>Function usage is similar to <a href="struct.Digest.html#method.allocate">Digest::allocate</a>.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.info" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/crypto_op.rs.html#1183-1185" title="goto source code">[src]</a></div><a href="#method.info" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.info" class="fnname">info</a>(&amp;self) -&gt; <a class="struct" href="struct.OperationInfo.html" title="struct optee_utee::crypto_op::OperationInfo">OperationInfo</a></h4></div></summary><div class="docblock"><p>Function usage is similar to <a href="struct.Digest.html#method.info">Digest::info</a>.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.info_multiple" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/crypto_op.rs.html#1188-1190" title="goto source code">[src]</a></div><a href="#method.info_multiple" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.info_multiple" class="fnname">info_multiple</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self, <br>&nbsp;&nbsp;&nbsp;&nbsp;info_buf: &amp;mut [u8]<br>) -&gt; <a class="type" href="../type.Result.html" title="type optee_utee::Result">Result</a>&lt;<a class="struct" href="struct.OperationInfoMultiple.html" title="struct optee_utee::crypto_op::OperationInfoMultiple">OperationInfoMultiple</a>&gt;</h4></div></summary><div class="docblock"><p>Function usage is similar to <a href="struct.Digest.html#method.info_multiple">Digest::info_multiple</a>.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.reset" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/crypto_op.rs.html#1193-1195" title="goto source code">[src]</a></div><a href="#method.reset" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.reset" class="fnname">reset</a>(&amp;mut self)</h4></div></summary><div class="docblock"><p>Function usage is similar to <a href="struct.Digest.html#method.reset">Digest::reset</a>.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.set_key" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/crypto_op.rs.html#1198-1200" title="goto source code">[src]</a></div><a href="#method.set_key" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.set_key" class="fnname">set_key</a>&lt;T:&nbsp;<a class="trait" href="../object/trait.ObjHandle.html" title="trait optee_utee::object::ObjHandle">ObjHandle</a>&gt;(&amp;self, object: &amp;T) -&gt; <a class="type" href="../type.Result.html" title="type optee_utee::Result">Result</a>&lt;()&gt;</h4></div></summary><div class="docblock"><p>Function usage is similar to <a href="struct.Cipher.html#method.set_key">Cipher::set_key</a>.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.copy" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/crypto_op.rs.html#1203-1205" title="goto source code">[src]</a></div><a href="#method.copy" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.copy" class="fnname">copy</a>&lt;T:&nbsp;<a class="trait" href="trait.OpHandle.html" title="trait optee_utee::crypto_op::OpHandle">OpHandle</a>&gt;(&amp;mut self, src: &amp;T)</h4></div></summary><div class="docblock"><p>Function usage is similar to <a href="struct.Digest.html#method.copy">Digest::copy</a>.</p>
</div></details></div></details><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-OpHandle" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/crypto_op.rs.html#1208-1212" title="goto source code">[src]</a></div><a href="#impl-OpHandle" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="trait.OpHandle.html" title="trait optee_utee::crypto_op::OpHandle">OpHandle</a> for <a class="struct" href="struct.AE.html" title="struct optee_utee::crypto_op::AE">AE</a></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.handle" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/crypto_op.rs.html#1209-1211" title="goto source code">[src]</a></div><a href="#method.handle" class="anchor"></a><h4 class="code-header">fn <a href="trait.OpHandle.html#tymethod.handle" class="fnname">handle</a>(&amp;self) -&gt; TEE_OperationHandle</h4></div></summary><div class='docblock'><p>Return the handle of an operation.</p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor"></a></h2><div id="synthetic-implementations-list"><div id="impl-RefUnwindSafe" class="impl has-srclink"><div class="rightside"></div><a href="#impl-RefUnwindSafe" class="anchor"></a><h3 class="code-header in-band">impl RefUnwindSafe for <a class="struct" href="struct.AE.html" title="struct optee_utee::crypto_op::AE">AE</a></h3></div><div id="impl-Send" class="impl has-srclink"><div class="rightside"></div><a href="#impl-Send" class="anchor"></a><h3 class="code-header in-band">impl !Send for <a class="struct" href="struct.AE.html" title="struct optee_utee::crypto_op::AE">AE</a></h3></div><div id="impl-Sync" class="impl has-srclink"><div class="rightside"></div><a href="#impl-Sync" class="anchor"></a><h3 class="code-header in-band">impl !Sync for <a class="struct" href="struct.AE.html" title="struct optee_utee::crypto_op::AE">AE</a></h3></div><div id="impl-Unpin" class="impl has-srclink"><div class="rightside"></div><a href="#impl-Unpin" class="anchor"></a><h3 class="code-header in-band">impl Unpin for <a class="struct" href="struct.AE.html" title="struct optee_utee::crypto_op::AE">AE</a></h3></div><div id="impl-UnwindSafe" class="impl has-srclink"><div class="rightside"></div><a href="#impl-UnwindSafe" class="anchor"></a><h3 class="code-header in-band">impl UnwindSafe for <a class="struct" href="struct.AE.html" title="struct optee_utee::crypto_op::AE">AE</a></h3></div></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor"></a></h2><div id="blanket-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-Any" class="impl has-srclink"><div class="rightside"></div><a href="#impl-Any" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; Any for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: 'static + ?Sized,&nbsp;</span></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.type_id" class="method trait-impl has-srclink"><div class="rightside"></div><a href="#method.type_id" class="anchor"></a><h4 class="code-header">pub fn <a class="fnname">type_id</a>(&amp;self) -&gt; TypeId</h4></div></summary><div class='docblock'><p>Gets the <code>TypeId</code> of <code>self</code>. <a href="#tymethod.type_id">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-Borrow%3CT%3E" class="impl has-srclink"><div class="rightside"></div><a href="#impl-Borrow%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; Borrow&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?Sized,&nbsp;</span></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.borrow" class="method trait-impl has-srclink"><div class="rightside"></div><a href="#method.borrow" class="anchor"></a><h4 class="code-header">pub fn <a class="fnname">borrow</a>(&amp;self) -&gt; &amp;T</h4></div></summary><div class='docblock'><p>Immutably borrows from an owned value. <a href="#tymethod.borrow">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-BorrowMut%3CT%3E" class="impl has-srclink"><div class="rightside"></div><a href="#impl-BorrowMut%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; BorrowMut&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?Sized,&nbsp;</span></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.borrow_mut" class="method trait-impl has-srclink"><div class="rightside"></div><a href="#method.borrow_mut" class="anchor"></a><h4 class="code-header">pub fn <a class="fnname">borrow_mut</a>(&amp;mut self) -&gt; &amp;mut T</h4></div></summary><div class='docblock'><p>Mutably borrows from an owned value. <a href="#tymethod.borrow_mut">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-From%3CT%3E" class="impl has-srclink"><div class="rightside"></div><a href="#impl-From%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; From&lt;T&gt; for T</h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.from" class="method trait-impl has-srclink"><div class="rightside"></div><a href="#method.from" class="anchor"></a><h4 class="code-header">pub fn <a class="fnname">from</a>(t: T) -&gt; T</h4></div></summary><div class='docblock'><p>Performs the conversion.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-Into%3CU%3E" class="impl has-srclink"><div class="rightside"></div><a href="#impl-Into%3CU%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T, U&gt; Into&lt;U&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: From&lt;T&gt;,&nbsp;</span></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.into" class="method trait-impl has-srclink"><div class="rightside"></div><a href="#method.into" class="anchor"></a><h4 class="code-header">pub fn <a class="fnname">into</a>(self) -&gt; U</h4></div></summary><div class='docblock'><p>Performs the conversion.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-TryFrom%3CU%3E" class="impl has-srclink"><div class="rightside"></div><a href="#impl-TryFrom%3CU%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T, U&gt; TryFrom&lt;U&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: Into&lt;T&gt;,&nbsp;</span></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle" open><summary><div id="associatedtype.Error" class="type trait-impl has-srclink"><a href="#associatedtype.Error" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.Error" class="type">Error</a> = Infallible</h4></div></summary><div class='docblock'><p>The type returned in the event of a conversion error.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.try_from" class="method trait-impl has-srclink"><div class="rightside"></div><a href="#method.try_from" class="anchor"></a><h4 class="code-header">pub fn <a class="fnname">try_from</a>(value: U) -&gt; Result&lt;T, &lt;T as TryFrom&lt;U&gt;&gt;::Error&gt;</h4></div></summary><div class='docblock'><p>Performs the conversion.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-TryInto%3CU%3E" class="impl has-srclink"><div class="rightside"></div><a href="#impl-TryInto%3CU%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T, U&gt; TryInto&lt;U&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: TryFrom&lt;T&gt;,&nbsp;</span></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle" open><summary><div id="associatedtype.Error-1" class="type trait-impl has-srclink"><a href="#associatedtype.Error-1" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.Error" class="type">Error</a> = &lt;U as TryFrom&lt;T&gt;&gt;::Error</h4></div></summary><div class='docblock'><p>The type returned in the event of a conversion error.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.try_into" class="method trait-impl has-srclink"><div class="rightside"></div><a href="#method.try_into" class="anchor"></a><h4 class="code-header">pub fn <a class="fnname">try_into</a>(self) -&gt; Result&lt;U, &lt;U as TryFrom&lt;T&gt;&gt;::Error&gt;</h4></div></summary><div class='docblock'><p>Performs the conversion.</p>
</div></details></div></details></div></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../" data-current-crate="optee_utee" data-search-index-js="../../search-index.js" data-search-js="../../search.js"></div>
<script src="../../main.js"></script>
</body></html>