blob: 33ffa7572d0450b0c8419f16813fec28928e9496 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.15"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>AMCL: ecdh_support.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">AMCL
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.15 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">ecdh_support.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>ECDH Support Header File.
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;amcl.h&quot;</code><br />
</div>
<p><a href="ecdh__support_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a3078495b62c35ca843d7be428075787d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecdh__support_8h.html#a3078495b62c35ca843d7be428075787d">ehashit</a> (int sha, <a class="el" href="structoctet.html">octet</a> *p, int n, <a class="el" href="structoctet.html">octet</a> *x, <a class="el" href="structoctet.html">octet</a> *w, int pad)</td></tr>
<tr class="memdesc:a3078495b62c35ca843d7be428075787d"><td class="mdescLeft">&#160;</td><td class="mdescRight">general purpose hash function w=hash(p|n|x|y) <a href="#a3078495b62c35ca843d7be428075787d">More...</a><br /></td></tr>
<tr class="separator:a3078495b62c35ca843d7be428075787d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae844e6528280a189a41b8095b8d41502"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecdh__support_8h.html#ae844e6528280a189a41b8095b8d41502">HASH</a> (int h, <a class="el" href="structoctet.html">octet</a> *I, <a class="el" href="structoctet.html">octet</a> *O)</td></tr>
<tr class="memdesc:ae844e6528280a189a41b8095b8d41502"><td class="mdescLeft">&#160;</td><td class="mdescRight">hash an octet into another octet <a href="#ae844e6528280a189a41b8095b8d41502">More...</a><br /></td></tr>
<tr class="separator:ae844e6528280a189a41b8095b8d41502"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3f914310b794e24aed3b14958579c246"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecdh__support_8h.html#a3f914310b794e24aed3b14958579c246">HMAC</a> (int h, <a class="el" href="structoctet.html">octet</a> *M, <a class="el" href="structoctet.html">octet</a> *K, int len, <a class="el" href="structoctet.html">octet</a> *tag)</td></tr>
<tr class="memdesc:a3f914310b794e24aed3b14958579c246"><td class="mdescLeft">&#160;</td><td class="mdescRight">HMAC of message M using key K to create tag of length len in octet tag. <a href="#a3f914310b794e24aed3b14958579c246">More...</a><br /></td></tr>
<tr class="separator:a3f914310b794e24aed3b14958579c246"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af451b083058dddf1aa794a20f636793b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecdh__support_8h.html#af451b083058dddf1aa794a20f636793b">KDF2</a> (int h, <a class="el" href="structoctet.html">octet</a> *Z, <a class="el" href="structoctet.html">octet</a> *P, int len, <a class="el" href="structoctet.html">octet</a> *K)</td></tr>
<tr class="memdesc:af451b083058dddf1aa794a20f636793b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Key Derivation Function - generates key K from inputs Z and P. <a href="#af451b083058dddf1aa794a20f636793b">More...</a><br /></td></tr>
<tr class="separator:af451b083058dddf1aa794a20f636793b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a62c536a5dc88eb2f318773d6461f9759"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecdh__support_8h.html#a62c536a5dc88eb2f318773d6461f9759">PBKDF2</a> (int h, <a class="el" href="structoctet.html">octet</a> *P, <a class="el" href="structoctet.html">octet</a> *S, int rep, int len, <a class="el" href="structoctet.html">octet</a> *K)</td></tr>
<tr class="memdesc:a62c536a5dc88eb2f318773d6461f9759"><td class="mdescLeft">&#160;</td><td class="mdescRight">Password Based Key Derivation Function - generates key K from password, salt and repeat counter. <a href="#a62c536a5dc88eb2f318773d6461f9759">More...</a><br /></td></tr>
<tr class="separator:a62c536a5dc88eb2f318773d6461f9759"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afa50c2b84fbb255a8484dc0f1ccb4e93"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecdh__support_8h.html#afa50c2b84fbb255a8484dc0f1ccb4e93">AES_CBC_IV0_ENCRYPT</a> (<a class="el" href="structoctet.html">octet</a> *K, <a class="el" href="structoctet.html">octet</a> *P, <a class="el" href="structoctet.html">octet</a> *C)</td></tr>
<tr class="memdesc:afa50c2b84fbb255a8484dc0f1ccb4e93"><td class="mdescLeft">&#160;</td><td class="mdescRight">AES encrypts a plaintext to a ciphtertext. <a href="#afa50c2b84fbb255a8484dc0f1ccb4e93">More...</a><br /></td></tr>
<tr class="separator:afa50c2b84fbb255a8484dc0f1ccb4e93"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8828699bae266bf22a61ce901e49e0bc"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecdh__support_8h.html#a8828699bae266bf22a61ce901e49e0bc">AES_CBC_IV0_DECRYPT</a> (<a class="el" href="structoctet.html">octet</a> *K, <a class="el" href="structoctet.html">octet</a> *C, <a class="el" href="structoctet.html">octet</a> *P)</td></tr>
<tr class="memdesc:a8828699bae266bf22a61ce901e49e0bc"><td class="mdescLeft">&#160;</td><td class="mdescRight">AES encrypts a plaintext to a ciphtertext. <a href="#a8828699bae266bf22a61ce901e49e0bc">More...</a><br /></td></tr>
<tr class="separator:a8828699bae266bf22a61ce901e49e0bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><dl class="section author"><dt>Author</dt><dd>Mike Scott </dd></dl>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="a8828699bae266bf22a61ce901e49e0bc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8828699bae266bf22a61ce901e49e0bc">&#9670;&nbsp;</a></span>AES_CBC_IV0_DECRYPT()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int AES_CBC_IV0_DECRYPT </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>K</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>C</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>P</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>IEEE-1363 AES_CBC_IV0_DECRYPT function. Decrypts in CBC mode with a zero IV. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">K</td><td>AES key </td></tr>
<tr><td class="paramname">C</td><td>input ciphertext octet </td></tr>
<tr><td class="paramname">P</td><td>output plaintext octet </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if bad input, else 1 </dd></dl>
</div>
</div>
<a id="afa50c2b84fbb255a8484dc0f1ccb4e93"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afa50c2b84fbb255a8484dc0f1ccb4e93">&#9670;&nbsp;</a></span>AES_CBC_IV0_ENCRYPT()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void AES_CBC_IV0_ENCRYPT </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>K</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>P</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>C</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>IEEE-1363 AES_CBC_IV0_ENCRYPT function. Encrypts in CBC mode with a zero IV, padding as necessary to create a full final block. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">K</td><td>AES key </td></tr>
<tr><td class="paramname">P</td><td>input plaintext octet </td></tr>
<tr><td class="paramname">C</td><td>output ciphertext octet </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a3078495b62c35ca843d7be428075787d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3078495b62c35ca843d7be428075787d">&#9670;&nbsp;</a></span>ehashit()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void ehashit </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>sha</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>n</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>w</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>pad</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<pre class="fragment">@param sha is the hash type
@param p first octect involved in the hash
@param n integer involved in the hash
@param x second octect involved in the h ash
@param w output
@param pad padding
</pre>
</div>
</div>
<a id="ae844e6528280a189a41b8095b8d41502"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae844e6528280a189a41b8095b8d41502">&#9670;&nbsp;</a></span>HASH()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void HASH </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>I</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>O</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">h</td><td>is the hash type </td></tr>
<tr><td class="paramname">I</td><td>input octet </td></tr>
<tr><td class="paramname">O</td><td>output octet - H(I) </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a3f914310b794e24aed3b14958579c246"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3f914310b794e24aed3b14958579c246">&#9670;&nbsp;</a></span>HMAC()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int HMAC </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>M</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>K</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>tag</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>IEEE-1363 MAC1 function. Uses SHA256 internally. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">h</td><td>is the hash type </td></tr>
<tr><td class="paramname">M</td><td>input message octet </td></tr>
<tr><td class="paramname">K</td><td>input encryption key </td></tr>
<tr><td class="paramname">len</td><td>is output desired length of HMAC tag </td></tr>
<tr><td class="paramname">tag</td><td>is the output HMAC </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 for bad parameters, else 1 </dd></dl>
</div>
</div>
<a id="af451b083058dddf1aa794a20f636793b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af451b083058dddf1aa794a20f636793b">&#9670;&nbsp;</a></span>KDF2()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void KDF2 </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>Z</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>P</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>K</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>IEEE-1363 KDF2 Key Derivation Function. Uses SHA256 internally. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">h</td><td>is the hash type </td></tr>
<tr><td class="paramname">Z</td><td>input octet </td></tr>
<tr><td class="paramname">P</td><td>input key derivation parameters - can be NULL </td></tr>
<tr><td class="paramname">len</td><td>is output desired length of key </td></tr>
<tr><td class="paramname">K</td><td>is the derived key </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a62c536a5dc88eb2f318773d6461f9759"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a62c536a5dc88eb2f318773d6461f9759">&#9670;&nbsp;</a></span>PBKDF2()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void PBKDF2 </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>P</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>S</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>rep</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>K</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>PBKDF2 Password Based Key Derivation Function. Uses SHA256 internally. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">h</td><td>is the hash type </td></tr>
<tr><td class="paramname">P</td><td>input password </td></tr>
<tr><td class="paramname">S</td><td>input salt </td></tr>
<tr><td class="paramname">rep</td><td>Number of times to be iterated. </td></tr>
<tr><td class="paramname">len</td><td>is output desired length </td></tr>
<tr><td class="paramname">K</td><td>is the derived key </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.15
</small></address>
</body>
</html>