blob: c5fe5815a3b2680c73c3e9fbfa06b3b2b1ccb677 [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 object containing attributes but no data stream, which is reclaimed when closed or when the TA instance is destroyed. Transient objects are used to hold a cryptographic object (key or key-pair)."><meta name="keywords" content="rust, rustlang, rust-lang, TransientObject"><title>TransientObject in optee_utee::object - 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 TransientObject</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_attribute_from">copy_attribute_from</a><a href="#method.generate_key">generate_key</a><a href="#method.info">info</a><a href="#method.null_object">null_object</a><a href="#method.populate">populate</a><a href="#method.ref_attribute">ref_attribute</a><a href="#method.reset">reset</a><a href="#method.restrict_usage">restrict_usage</a><a href="#method.value_attribute">value_attribute</a></div><h3 class="sidebar-title"><a href="#trait-implementations">Trait Implementations</a></h3><div class="sidebar-links"><a href="#impl-Drop">Drop</a><a href="#impl-ObjHandle">ObjHandle</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">object</a></h2><div id="sidebar-vars" data-name="TransientObject" 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">object</a>::<wbr><a class="struct" href="#">TransientObject</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/object.rs.html#485" title="goto source code">[src]</a></span></h1><div class="docblock type-decl"><pre class="rust struct"><code>pub struct TransientObject(_);</code></pre></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>An object containing attributes but no data stream, which is reclaimed
when closed or when the TA instance is destroyed.
Transient objects are used to hold a cryptographic object (key or key-pair).</p>
<p>Contrast <a href="struct.PersistentObject.html">PersistentObject</a>.</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/object.rs.html#487-825" 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.TransientObject.html" title="struct optee_utee::object::TransientObject">TransientObject</a></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.null_object" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/object.rs.html#489-491" title="goto source code">[src]</a></div><a href="#method.null_object" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.null_object" class="fnname">null_object</a>() -&gt; Self</h4></div></summary><div class="docblock"><p>Create a <a href="struct.TransientObject.html">TransientObject</a> with a null handle which points to nothing.</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/object.rs.html#528-539" 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;object_type: <a class="enum" href="enum.TransientObjectType.html" title="enum optee_utee::object::TransientObjectType">TransientObjectType</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;max_object_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>Allocate an uninitialized <a href="struct.TransientObject.html">TransientObject</a>, i.e. a container for attributes.</p>
<p>As allocated, the object is uninitialized.
It can be initialized by subsequently importing the object material, generating an object,
deriving an object, or loading an object from the Trusted Storage.</p>
<h1 id="parameters" class="section-header"><a href="#parameters">Parameters</a></h1>
<ol>
<li><code>object_type</code>: Type of uninitialized object container to be created as defined in
<a href="enum.TransientObjectType.html">TransientObjectType</a>.</li>
<li><code>max_object_size</code>: Key Size of the object. Valid values depend on the object type and are
defined in <a href="enum.TransientObjectType.html">TransientObjectType</a>.</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">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">object</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>),
}</code></pre></div>
<h1 id="errors" class="section-header"><a href="#errors">Errors</a></h1>
<ol>
<li><code>OutOfMemory</code>: If not enough resources are available to allocate the object handle.</li>
<li><code>NotSupported</code>: If the key size is not supported or the object type is not supported.</li>
</ol>
<h1 id="panics" class="section-header"><a href="#panics">Panics</a></h1>
<ol>
<li>If the Implementation detects any error associated with this function which is not
explicitly associated with a defined return code for this function.</li>
</ol>
</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/object.rs.html#544-548" 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>Reset a <a href="struct.TransientObject.html">TransientObject</a> to its initial state after allocation.
If the object is currently initialized, the function clears the object of all its material.
The object is then uninitialized again.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.populate" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/object.rs.html#586-594" title="goto source code">[src]</a></div><a href="#method.populate" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.populate" class="fnname">populate</a>(&amp;mut self, attrs: &amp;[<a class="struct" href="struct.Attribute.html" title="struct optee_utee::object::Attribute">Attribute</a>]) -&gt; <a class="type" href="../type.Result.html" title="type optee_utee::Result">Result</a>&lt;()&gt;</h4></div></summary><div class="docblock"><p>Populate an uninitialized object container with object attributes passed by the TA in the <code>attrs</code> parameter.
When this function is called, the object SHALL be uninitialized.
If the object is initialized, the caller SHALL first clear it using the function reset.
Note that if the object type is a key-pair, then this function sets both the private and public attributes of the keypair.</p>
<h1 id="parameters-1" class="section-header"><a href="#parameters-1">Parameters</a></h1>
<ol>
<li><code>attrs</code>: Array of object attributes.</li>
</ol>
<h1 id="example-1" class="section-header"><a href="#example-1">Example</a></h1>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><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">object</span>) <span class="op">=</span><span class="op">&gt;</span>
{
<span class="kw">let</span> <span class="ident">attrs</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="number">0u8</span>;<span class="number">1</span>])];
<span class="ident">object</span>.<span class="ident">populate</span>(<span class="kw-2">&amp;</span><span class="ident">attrs</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>),
}</code></pre></div>
<h1 id="errors-1" class="section-header"><a href="#errors-1">Errors</a></h1>
<ol>
<li><code>BadParameters</code>: If an incorrect or inconsistent attribute value is detected. In this case,
the content of the object SHALL remain uninitialized.</li>
</ol>
<h1 id="panics-1" class="section-header"><a href="#panics-1">Panics</a></h1>
<ol>
<li>If object is not a valid opened object that is transient and uninitialized.</li>
<li>If some mandatory attribute is missing.</li>
<li>If an attribute which is not defined for the object’s type is present in attrs.</li>
<li>If an attribute value is too big to fit within the maximum object size specified when the object was created.</li>
<li>If the Implementation detects any other error associated with this function which is not
explicitly associated with a defined return code for this function.</li>
</ol>
</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/object.rs.html#619-621" 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="type" href="../type.Result.html" title="type optee_utee::Result">Result</a>&lt;<a class="struct" href="struct.ObjectInfo.html" title="struct optee_utee::object::ObjectInfo">ObjectInfo</a>&gt;</h4></div></summary><div class="docblock"><p>Return the characteristics of an object.</p>
<h1 id="example-2" class="section-header"><a href="#example-2">Example</a></h1>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><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">object</span>) <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">match</span> <span class="ident">object</span>.<span class="ident">info</span>() {
<span class="prelude-val">Ok</span>(<span class="ident">info</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>),
}</code></pre></div>
<h1 id="panics-2" class="section-header"><a href="#panics-2">Panics</a></h1>
<ol>
<li>If object is not a valid opened object.</li>
<li>If the Implementation detects any other error associated with this function which is not
explicitly associated with a defined return code for this function.</li>
</ol>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.restrict_usage" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/object.rs.html#649-651" title="goto source code">[src]</a></div><a href="#method.restrict_usage" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.restrict_usage" class="fnname">restrict_usage</a>(&amp;mut self, obj_usage: <a class="struct" href="struct.UsageFlag.html" title="struct optee_utee::object::UsageFlag">UsageFlag</a>) -&gt; <a class="type" href="../type.Result.html" title="type optee_utee::Result">Result</a>&lt;()&gt;</h4></div></summary><div class="docblock"><p>Restrict the object usage flags of an object handle to contain at most the flags passed in the obj_usage parameter.</p>
<p>The initial value of the key usage contains all usage flags.</p>
<h1 id="parameters-2" class="section-header"><a href="#parameters-2">Parameters</a></h1>
<ol>
<li><code>obj_usage</code>: New object usage, an OR comination of one or more of the <a href="struct.UsageFlag.html">UsageFlag</a>.</li>
</ol>
<h1 id="example-3" class="section-header"><a href="#example-3">Example</a></h1>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><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">object</span>) <span class="op">=</span><span class="op">&gt;</span>
{
<span class="ident">object</span>.<span class="ident">restrict_usage</span>(<span class="ident">UsageFlag::ENCRYPT</span>)<span class="question-mark">?</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>),
}</code></pre></div>
<h1 id="panics-3" class="section-header"><a href="#panics-3">Panics</a></h1>
<ol>
<li>If object is not a valid opened object.</li>
<li>If the Implementation detects any other error associated with this function which is not
explicitly associated with a defined return code for this function.</li>
</ol>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.ref_attribute" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/object.rs.html#688-690" title="goto source code">[src]</a></div><a href="#method.ref_attribute" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.ref_attribute" class="fnname">ref_attribute</a>(&amp;self, id: <a class="enum" href="enum.AttributeId.html" title="enum optee_utee::object::AttributeId">AttributeId</a>, buffer: &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>Extract one buffer attribute from an object. The attribute is identified by the argument id.</p>
<h1 id="parameters-3" class="section-header"><a href="#parameters-3">Parameters</a></h1>
<ol>
<li><code>id</code>: Identifier of the attribute to retrieve.</li>
<li><code>ref_attr</code>: Output buffer to get the content of the attribute.</li>
</ol>
<h1 id="example-4" class="section-header"><a href="#example-4">Example</a></h1>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><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">object</span>) <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">attr</span> <span class="op">=</span> [<span class="number">0u8</span>; <span class="number">16</span>];
<span class="kw">match</span> <span class="ident">object</span>.<span class="ident">ref_attribute</span>(<span class="ident">id</span>, <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">attr</span>) {
<span class="prelude-val">Ok</span>(<span class="ident">size</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>),
}</code></pre></div>
<h1 id="errors-2" class="section-header"><a href="#errors-2">Errors</a></h1>
<ol>
<li><code>ItemNotFound</code>: If the attribute is not found on this object.</li>
<li><code>ShortBuffer</code>: If buffer is NULL or too small to contain the key part.</li>
</ol>
<h1 id="panics-4" class="section-header"><a href="#panics-4">Panics</a></h1>
<ol>
<li>If object is not a valid opened object.</li>
<li>If the object is not initialized.</li>
<li>If the Attribute is not a buffer attribute.</li>
</ol>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.value_attribute" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/object.rs.html#725-727" title="goto source code">[src]</a></div><a href="#method.value_attribute" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.value_attribute" class="fnname">value_attribute</a>(&amp;self, id: u32) -&gt; <a class="type" href="../type.Result.html" title="type optee_utee::Result">Result</a>&lt;(u32, u32)&gt;</h4></div></summary><div class="docblock"><p>Extract one value attribute from an object. The attribute is identified by the argument id.</p>
<h1 id="parameters-4" class="section-header"><a href="#parameters-4">Parameters</a></h1>
<ol>
<li><code>id</code>: Identifier of the attribute to retrieve.</li>
<li><code>value_attr</code>: Two value placeholders to get the content of the attribute.</li>
</ol>
<h1 id="example-5" class="section-header"><a href="#example-5">Example</a></h1>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><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">object</span>) <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">match</span> <span class="ident">object</span>.<span class="ident">value_attribute</span>(<span class="ident">id</span>) {
<span class="prelude-val">Ok</span>(<span class="ident">a</span>,<span class="ident">b</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>),
}</code></pre></div>
<h1 id="errors-3" class="section-header"><a href="#errors-3">Errors</a></h1>
<ol>
<li><code>ItemNotFound</code>: If the attribute is not found on this object.</li>
</ol>
<h1 id="panics-5" class="section-header"><a href="#panics-5">Panics</a></h1>
<ol>
<li>If object is not a valid opened object.</li>
<li>If the object is not initialized.</li>
<li>If the Attribute is not a value attribute.</li>
</ol>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.copy_attribute_from" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/object.rs.html#770-775" title="goto source code">[src]</a></div><a href="#method.copy_attribute_from" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.copy_attribute_from" class="fnname">copy_attribute_from</a>&lt;T:&nbsp;<a class="trait" href="trait.ObjHandle.html" title="trait optee_utee::object::ObjHandle">ObjHandle</a>&gt;(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;mut self, <br>&nbsp;&nbsp;&nbsp;&nbsp;src_object: &amp;T<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>Populates an uninitialized object handle with the attributes of another object handle;
that is, it populates the attributes of this handle with the attributes of src_handle.
It is most useful in the following situations:</p>
<ol>
<li>To extract the public key attributes from a key-pair object.</li>
<li>To copy the attributes from a <a href="struct.PersistentObject.html">PersistentObject</a> into a <a href="struct.TransientObject.html">TransientObject</a>.</li>
</ol>
<h1 id="parameters-5" class="section-header"><a href="#parameters-5">Parameters</a></h1>
<ol>
<li><code>src_object</code>: Can be either a <a href="struct.TransientObject.html">TransientObject</a> or <a href="struct.PersistentObject.html">PersistentObject</a>.</li>
</ol>
<h1 id="example-6" class="section-header"><a href="#example-6">Example</a></h1>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><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">object1</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">256</span>) {
<span class="prelude-val">Ok</span>(<span class="ident">object2</span>) <span class="op">=</span><span class="op">&gt;</span> {
<span class="ident">object1</span>.<span class="ident">copy_attribute_from</span>(<span class="ident">object2</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>),
}</code></pre></div>
<h1 id="errors-4" class="section-header"><a href="#errors-4">Errors</a></h1>
<ol>
<li><code>CorruptObject</code>: If the persistentd` object is corrupt. The object handle is closed.</li>
<li><code>StorageNotAvailable</code>: If the <a href="struct.PersistentObject.html">PersistentObject</a> is stored in a storage area which is
currently inaccessible.</li>
</ol>
<h1 id="panics-6" class="section-header"><a href="#panics-6">Panics</a></h1>
<ol>
<li>If src_object is not initialized.</li>
<li>If self is initialized.</li>
<li>If the type and size of src_object and self are not compatible.</li>
<li>If the Implementation detects any other error associated with this function which is not
explicitly associated with a defined return code for this function.</li>
</ol>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.generate_key" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/object.rs.html#811-824" title="goto source code">[src]</a></div><a href="#method.generate_key" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.generate_key" class="fnname">generate_key</a>(&amp;self, key_size: usize, params: &amp;[<a class="struct" href="struct.Attribute.html" title="struct optee_utee::object::Attribute">Attribute</a>]) -&gt; <a class="type" href="../type.Result.html" title="type optee_utee::Result">Result</a>&lt;()&gt;</h4></div></summary><div class="docblock"><p>Generates a random key or a key-pair and populates a transient key object with the generated key material.</p>
<h1 id="parameters-6" class="section-header"><a href="#parameters-6">Parameters</a></h1>
<ol>
<li><code>key_size</code>: the size of the desired key. It SHALL be less than or equal to
the maximum key size specified when the <a href="struct.TransientObject.html">TransientObject</a> was created.</li>
</ol>
<h1 id="example-7" class="section-header"><a href="#example-7">Example</a></h1>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><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">object</span>) <span class="op">=</span><span class="op">&gt;</span>
{
<span class="ident">object</span>.<span class="ident">generate_key</span>(<span class="number">128</span>, <span class="kw-2">&amp;</span>[])<span class="question-mark">?</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>),
}</code></pre></div>
<h1 id="errors-5" class="section-header"><a href="#errors-5">Errors</a></h1>
<ol>
<li><code>BadParameters</code>: If an incorrect or inconsistent attribute value is detected. In this
case, the content of the object SHALL remain uninitialized.</li>
</ol>
<h1 id="panics-7" class="section-header"><a href="#panics-7">Panics</a></h1>
<ol>
<li>If object is not a valid opened object.</li>
<li>If some mandatory attribute is missing.</li>
<li>If an attribute which is not defined for the object’s type is present in attrs.</li>
<li>If an attribute value is too big to fit within the maximum object size specified when
the object was created.</li>
<li>If the Implementation detects any other error associated with this function which is not
explicitly associated with a defined return code for this function.</li>
</ol>
</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-Drop" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/object.rs.html#833-851" title="goto source code">[src]</a></div><a href="#impl-Drop" class="anchor"></a><h3 class="code-header in-band">impl Drop for <a class="struct" href="struct.TransientObject.html" title="struct optee_utee::object::TransientObject">TransientObject</a></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.drop" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/object.rs.html#843-850" title="goto source code">[src]</a></div><a href="#method.drop" class="anchor"></a><h4 class="code-header">fn <a class="fnname">drop</a>(&amp;mut self)</h4></div></summary><div class="docblock"><p>Deallocates a <a href="struct.TransientObject.html">TransientObject</a> previously allocated.
After this function has been called, the object handle is no longer valid and all resources
associated with the <a href="struct.TransientObject.html">TransientObject</a> SHALL have been reclaimed.</p>
<h1 id="panics-8" class="section-header"><a href="#panics-8">Panics</a></h1>
<ol>
<li>If object is not a valid opened object.</li>
<li>If the Implementation detects any other error associated with this function which is not
explicitly associated with a defined return code for this function.</li>
</ol>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-ObjHandle" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/optee_utee/object.rs.html#827-831" title="goto source code">[src]</a></div><a href="#impl-ObjHandle" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="trait.ObjHandle.html" title="trait optee_utee::object::ObjHandle">ObjHandle</a> for <a class="struct" href="struct.TransientObject.html" title="struct optee_utee::object::TransientObject">TransientObject</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/object.rs.html#828-830" title="goto source code">[src]</a></div><a href="#method.handle" class="anchor"></a><h4 class="code-header">fn <a href="trait.ObjHandle.html#tymethod.handle" class="fnname">handle</a>(&amp;self) -&gt; TEE_ObjectHandle</h4></div></summary><div class='docblock'><p>Return the handle of an object.</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.TransientObject.html" title="struct optee_utee::object::TransientObject">TransientObject</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.TransientObject.html" title="struct optee_utee::object::TransientObject">TransientObject</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.TransientObject.html" title="struct optee_utee::object::TransientObject">TransientObject</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.TransientObject.html" title="struct optee_utee::object::TransientObject">TransientObject</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.TransientObject.html" title="struct optee_utee::object::TransientObject">TransientObject</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>