blob: dd9ffb8248e8141003db0ee9dd91e58f8e04cad7 [file] [log] [blame]
Jaeden Ameroe54e6932018-08-06 16:19:58 +01001<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml">
3<head>
4<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6<meta name="generator" content="Doxygen 1.8.13"/>
7<meta name="viewport" content="width=device-width, initial-scale=1"/>
8<title>Platform Security Architecture — cryptography and keystore interface: Key derivation</title>
9<link href="tabs.css" rel="stylesheet" type="text/css"/>
10<script type="text/javascript" src="jquery.js"></script>
11<script type="text/javascript" src="dynsections.js"></script>
12<link href="search/search.css" rel="stylesheet" type="text/css"/>
13<script type="text/javascript" src="search/searchdata.js"></script>
14<script type="text/javascript" src="search/search.js"></script>
15<link href="doxygen.css" rel="stylesheet" type="text/css" />
16</head>
17<body>
18<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
19<div id="titlearea">
20<table cellspacing="0" cellpadding="0">
21 <tbody>
22 <tr style="height: 56px;">
23 <td id="projectalign" style="padding-left: 0.5em;">
24 <div id="projectname">Platform Security Architecture — cryptography and keystore interface
25 &#160;<span id="projectnumber">Working draft</span>
26 </div>
27 </td>
28 </tr>
29 </tbody>
30</table>
31</div>
32<!-- end header part -->
33<!-- Generated by Doxygen 1.8.13 -->
34<script type="text/javascript">
35var searchBox = new SearchBox("searchBox", "search",false,'Search');
36</script>
37<script type="text/javascript" src="menudata.js"></script>
38<script type="text/javascript" src="menu.js"></script>
39<script type="text/javascript">
40$(function() {
41 initMenu('',true,false,'search.php','Search');
42 $(document).ready(function() { init_search(); });
43});
44</script>
45<div id="main-nav"></div>
46</div><!-- top -->
47<!-- window showing the filter options -->
48<div id="MSearchSelectWindow"
49 onmouseover="return searchBox.OnSearchSelectShow()"
50 onmouseout="return searchBox.OnSearchSelectHide()"
51 onkeydown="return searchBox.OnSearchSelectKey(event)">
52</div>
53
54<!-- iframe showing the search results (closed by default) -->
55<div id="MSearchResultsWindow">
56<iframe src="javascript:void(0)" frameborder="0"
57 name="MSearchResults" id="MSearchResults">
58</iframe>
59</div>
60
61<div class="header">
62 <div class="summary">
63<a href="#func-members">Functions</a> </div>
64 <div class="headertitle">
65<div class="title">Key derivation</div> </div>
66</div><!--header-->
67<div class="contents">
68<table class="memberdecls">
69<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
70Functions</h2></td></tr>
71<tr class="memitem:ga1b6429f443a45e5f3209043abbbe8315"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__basic.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__derivation.html#ga1b6429f443a45e5f3209043abbbe8315">psa_key_derivation</a> (<a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *generator, <a class="el" href="group__platform.html#gac3da92a6b8a7f0c01dc348f8e0432e4c">psa_key_slot_t</a> key, <a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a> alg, const uint8_t *salt, size_t salt_length, const uint8_t *label, size_t label_length, size_t capacity)</td></tr>
72<tr class="separator:ga1b6429f443a45e5f3209043abbbe8315"><td class="memSeparator" colspan="2">&#160;</td></tr>
73</table>
74<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
75<h2 class="groupheader">Function Documentation</h2>
76<a id="ga1b6429f443a45e5f3209043abbbe8315"></a>
77<h2 class="memtitle"><span class="permalink"><a href="#ga1b6429f443a45e5f3209043abbbe8315">&#9670;&nbsp;</a></span>psa_key_derivation()</h2>
78
79<div class="memitem">
80<div class="memproto">
81 <table class="memname">
82 <tr>
83 <td class="memname"><a class="el" href="group__basic.html#ga05676e70ba5c6a7565aff3c36677c1f9">psa_status_t</a> psa_key_derivation </td>
84 <td>(</td>
85 <td class="paramtype"><a class="el" href="group__generators.html#ga1f894c4fba202ef8e307d72caf489e3b">psa_crypto_generator_t</a> *&#160;</td>
86 <td class="paramname"><em>generator</em>, </td>
87 </tr>
88 <tr>
89 <td class="paramkey"></td>
90 <td></td>
91 <td class="paramtype"><a class="el" href="group__platform.html#gac3da92a6b8a7f0c01dc348f8e0432e4c">psa_key_slot_t</a>&#160;</td>
92 <td class="paramname"><em>key</em>, </td>
93 </tr>
94 <tr>
95 <td class="paramkey"></td>
96 <td></td>
97 <td class="paramtype"><a class="el" href="group__crypto__types.html#gac2e4d47f1300d73c2f829a6d99252d69">psa_algorithm_t</a>&#160;</td>
98 <td class="paramname"><em>alg</em>, </td>
99 </tr>
100 <tr>
101 <td class="paramkey"></td>
102 <td></td>
103 <td class="paramtype">const uint8_t *&#160;</td>
104 <td class="paramname"><em>salt</em>, </td>
105 </tr>
106 <tr>
107 <td class="paramkey"></td>
108 <td></td>
109 <td class="paramtype">size_t&#160;</td>
110 <td class="paramname"><em>salt_length</em>, </td>
111 </tr>
112 <tr>
113 <td class="paramkey"></td>
114 <td></td>
115 <td class="paramtype">const uint8_t *&#160;</td>
116 <td class="paramname"><em>label</em>, </td>
117 </tr>
118 <tr>
119 <td class="paramkey"></td>
120 <td></td>
121 <td class="paramtype">size_t&#160;</td>
122 <td class="paramname"><em>label_length</em>, </td>
123 </tr>
124 <tr>
125 <td class="paramkey"></td>
126 <td></td>
127 <td class="paramtype">size_t&#160;</td>
128 <td class="paramname"><em>capacity</em>&#160;</td>
129 </tr>
130 <tr>
131 <td></td>
132 <td>)</td>
133 <td></td><td></td>
134 </tr>
135 </table>
136</div><div class="memdoc">
137<p>Set up a key derivation operation.</p>
138<p>A key derivation algorithm takes three inputs: a secret input <code>key</code> and two non-secret inputs <code>label</code> and p salt. The result of this function is a byte generator which can be used to produce keys and other cryptographic material.</p>
139<p>The role of <code>label</code> and <code>salt</code> is as follows:</p><ul>
140<li>For HKDF (<a class="el" href="group__crypto__types.html#ga32a888fb360e6e25cab8a343772c4a82">PSA_ALG_HKDF</a>), <code>salt</code> is the salt used in the "extract" step and <code>label</code> is the info string used in the "expand" step.</li>
141</ul>
142<dl class="params"><dt>Parameters</dt><dd>
143 <table class="params">
144 <tr><td class="paramdir">[in,out]</td><td class="paramname">generator</td><td>The generator object to set up. It must have been initialized to . </td></tr>
145 <tr><td class="paramdir"></td><td class="paramname">key</td><td>Slot containing the secret key to use. </td></tr>
146 <tr><td class="paramdir"></td><td class="paramname">alg</td><td>The key derivation algorithm to compute (<code>PSA_ALG_XXX</code> value such that <a class="el" href="group__crypto__types.html#gaf8b90c648aa53dbd06c236695e300cd0">PSA_ALG_IS_KEY_DERIVATION</a>(<code>alg</code>) is true). </td></tr>
147 <tr><td class="paramdir">[in]</td><td class="paramname">salt</td><td>Salt to use. </td></tr>
148 <tr><td class="paramdir"></td><td class="paramname">salt_length</td><td>Size of the <code>salt</code> buffer in bytes. </td></tr>
149 <tr><td class="paramdir">[in]</td><td class="paramname">label</td><td>Label to use. </td></tr>
150 <tr><td class="paramdir"></td><td class="paramname">label_length</td><td>Size of the <code>label</code> buffer in bytes. </td></tr>
151 <tr><td class="paramdir"></td><td class="paramname">capacity</td><td>The maximum number of bytes that the generator will be able to provide.</td></tr>
152 </table>
153 </dd>
154</dl>
155<dl class="retval"><dt>Return values</dt><dd>
156 <table class="retval">
157 <tr><td class="paramname"><a class="el" href="group__basic.html#ga4cc859e2c66ca381c7418db3527a65e1">PSA_SUCCESS</a></td><td>Success. </td></tr>
158 <tr><td class="paramname"><a class="el" href="group__basic.html#gaba00e3e6ceb2b12965a81e5ac02ae040">PSA_ERROR_EMPTY_SLOT</a></td><td></td></tr>
159 <tr><td class="paramname"><a class="el" href="group__basic.html#ga4d1b8dd8526177a15a210b7afc1accb1">PSA_ERROR_NOT_PERMITTED</a></td><td></td></tr>
160 <tr><td class="paramname"><a class="el" href="group__basic.html#ga798df25a505ebf931f7bec1f80f1f85f">PSA_ERROR_INVALID_ARGUMENT</a></td><td><code>key</code> is not compatible with <code>alg</code>, or <code>capacity</code> is too large for the specified algorithm and key. </td></tr>
161 <tr><td class="paramname"><a class="el" href="group__basic.html#ga1dcc6d130633ed5db8942257581b55dd">PSA_ERROR_NOT_SUPPORTED</a></td><td><code>alg</code> is not supported or is not a key derivation algorithm. </td></tr>
162 <tr><td class="paramname"><a class="el" href="group__basic.html#ga91b2ad8a867517a2651f1b076c5216e5">PSA_ERROR_INSUFFICIENT_MEMORY</a></td><td></td></tr>
163 <tr><td class="paramname"><a class="el" href="group__basic.html#ga5cdb6948371d49e916106249020ea3f7">PSA_ERROR_COMMUNICATION_FAILURE</a></td><td></td></tr>
164 <tr><td class="paramname"><a class="el" href="group__basic.html#ga08b10e70fa5ff0b05c631d9f8f6b2c6b">PSA_ERROR_HARDWARE_FAILURE</a></td><td></td></tr>
165 <tr><td class="paramname"><a class="el" href="group__basic.html#ga2c5dda1485cb54f2385cb9c1279a7004">PSA_ERROR_TAMPERING_DETECTED</a></td><td></td></tr>
166 </table>
167 </dd>
168</dl>
169
170</div>
171</div>
172</div><!-- contents -->
173<!-- start footer part -->
174<hr class="footer"/><address class="footer"><small>
175Generated by &#160;<a href="http://www.doxygen.org/index.html">
176<img class="footer" src="doxygen.png" alt="doxygen"/>
177</a> 1.8.13
178</small></address>
179</body>
180</html>