Sophie

Sophie

distrib > Mageia > 4 > x86_64 > by-pkgid > 9e72f3e7ecf68cce016a7c5c59e863d3 > files > 335

lib64polarssl-devel-1.3.8-1.mga4.x86_64.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/>
<title>PolarSSL v1.3.8: ecp.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="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 style="padding-left: 0.5em;">
   <div id="projectname">PolarSSL v1.3.8
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.5 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_6a9bbd12bf4e19a18c45e270f8fae3fd.html">include</a></li><li class="navelem"><a class="el" href="dir_04272d44da4745cf8b8bfc767d6c6523.html">polarssl</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">ecp.h File Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>Elliptic curves over GF(p)  
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;<a class="el" href="bignum_8h_source.html">bignum.h</a>&quot;</code><br/>
</div><div class="textblock"><div class="dynheader">
Include dependency graph for ecp.h:</div>
<div class="dyncontent">
<div class="center"><img src="ecp_8h__incl.png" border="0" usemap="#ecp_8h" alt=""/></div>
<map name="ecp_8h" id="ecp_8h">
</map>
</div>
</div><div class="textblock"><div class="dynheader">
This graph shows which files directly or indirectly include this file:</div>
<div class="dyncontent">
<div class="center"><img src="ecp_8h__dep__incl.png" border="0" usemap="#ecp_8hdep" alt=""/></div>
<map name="ecp_8hdep" id="ecp_8hdep">
</map>
</div>
</div>
<p><a href="ecp_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="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structecp__curve__info.html">ecp_curve_info</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Curve information for use by other modules.  <a href="structecp__curve__info.html#details">More...</a><br/></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structecp__point.html">ecp_point</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">ECP point structure (jacobian coordinates)  <a href="structecp__point.html#details">More...</a><br/></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structecp__group.html">ecp_group</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">ECP group structure.  <a href="structecp__group.html#details">More...</a><br/></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structecp__keypair.html">ecp_keypair</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">ECP key pair structure.  <a href="structecp__keypair.html#details">More...</a><br/></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:a59e5b00eddc35acbb507340379c4d056"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a59e5b00eddc35acbb507340379c4d056">POLARSSL_ERR_ECP_BAD_INPUT_DATA</a>&#160;&#160;&#160;-0x4F80</td></tr>
<tr class="memdesc:a59e5b00eddc35acbb507340379c4d056"><td class="mdescLeft">&#160;</td><td class="mdescRight">Bad input parameters to function.  <a href="#a59e5b00eddc35acbb507340379c4d056">More...</a><br/></td></tr>
<tr class="separator:a59e5b00eddc35acbb507340379c4d056"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5dde870beebeca665d636398cd084fba"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a5dde870beebeca665d636398cd084fba">POLARSSL_ERR_ECP_BUFFER_TOO_SMALL</a>&#160;&#160;&#160;-0x4F00</td></tr>
<tr class="memdesc:a5dde870beebeca665d636398cd084fba"><td class="mdescLeft">&#160;</td><td class="mdescRight">The buffer is too small to write to.  <a href="#a5dde870beebeca665d636398cd084fba">More...</a><br/></td></tr>
<tr class="separator:a5dde870beebeca665d636398cd084fba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a87be7bf7e5b042e8ee3b73dbe5f3cc3a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a87be7bf7e5b042e8ee3b73dbe5f3cc3a">POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE</a>&#160;&#160;&#160;-0x4E80</td></tr>
<tr class="memdesc:a87be7bf7e5b042e8ee3b73dbe5f3cc3a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Requested curve not available.  <a href="#a87be7bf7e5b042e8ee3b73dbe5f3cc3a">More...</a><br/></td></tr>
<tr class="separator:a87be7bf7e5b042e8ee3b73dbe5f3cc3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a250e37c379fd853d666415a8fc308e6e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a250e37c379fd853d666415a8fc308e6e">POLARSSL_ERR_ECP_VERIFY_FAILED</a>&#160;&#160;&#160;-0x4E00</td></tr>
<tr class="memdesc:a250e37c379fd853d666415a8fc308e6e"><td class="mdescLeft">&#160;</td><td class="mdescRight">The signature is not valid.  <a href="#a250e37c379fd853d666415a8fc308e6e">More...</a><br/></td></tr>
<tr class="separator:a250e37c379fd853d666415a8fc308e6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a01a0e6796f75c7bdd1a41312c4fa60c1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a01a0e6796f75c7bdd1a41312c4fa60c1">POLARSSL_ERR_ECP_MALLOC_FAILED</a>&#160;&#160;&#160;-0x4D80</td></tr>
<tr class="memdesc:a01a0e6796f75c7bdd1a41312c4fa60c1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Memory allocation failed.  <a href="#a01a0e6796f75c7bdd1a41312c4fa60c1">More...</a><br/></td></tr>
<tr class="separator:a01a0e6796f75c7bdd1a41312c4fa60c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8de4c3d074d63c08f314012b604c98c8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a8de4c3d074d63c08f314012b604c98c8">POLARSSL_ERR_ECP_RANDOM_FAILED</a>&#160;&#160;&#160;-0x4D00</td></tr>
<tr class="memdesc:a8de4c3d074d63c08f314012b604c98c8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generation of random value, such as (ephemeral) key, failed.  <a href="#a8de4c3d074d63c08f314012b604c98c8">More...</a><br/></td></tr>
<tr class="separator:a8de4c3d074d63c08f314012b604c98c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a200efec3d662151ea19bcd730807c769"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a200efec3d662151ea19bcd730807c769">POLARSSL_ERR_ECP_INVALID_KEY</a>&#160;&#160;&#160;-0x4C80</td></tr>
<tr class="memdesc:a200efec3d662151ea19bcd730807c769"><td class="mdescLeft">&#160;</td><td class="mdescRight">Invalid private or public key.  <a href="#a200efec3d662151ea19bcd730807c769">More...</a><br/></td></tr>
<tr class="separator:a200efec3d662151ea19bcd730807c769"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1d2b0f995bf076c5ce5bbc7deb94150c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a1d2b0f995bf076c5ce5bbc7deb94150c">POLARSSL_ERR_ECP_SIG_LEN_MISMATCH</a>&#160;&#160;&#160;-0x4C00</td></tr>
<tr class="memdesc:a1d2b0f995bf076c5ce5bbc7deb94150c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Signature is valid but shorter than the user-supplied length.  <a href="#a1d2b0f995bf076c5ce5bbc7deb94150c">More...</a><br/></td></tr>
<tr class="separator:a1d2b0f995bf076c5ce5bbc7deb94150c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a360bfb37c5abe58d6153f1e16936ea92"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a360bfb37c5abe58d6153f1e16936ea92">POLARSSL_ECP_DP_MAX</a>&#160;&#160;&#160;12</td></tr>
<tr class="memdesc:a360bfb37c5abe58d6153f1e16936ea92"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of supported curves (plus one for NONE).  <a href="#a360bfb37c5abe58d6153f1e16936ea92">More...</a><br/></td></tr>
<tr class="separator:a360bfb37c5abe58d6153f1e16936ea92"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac9035f34ba62d16e0e37bdaca67e37e2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#ac9035f34ba62d16e0e37bdaca67e37e2">POLARSSL_ECP_PF_UNCOMPRESSED</a>&#160;&#160;&#160;0</td></tr>
<tr class="memdesc:ac9035f34ba62d16e0e37bdaca67e37e2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Uncompressed point format.  <a href="#ac9035f34ba62d16e0e37bdaca67e37e2">More...</a><br/></td></tr>
<tr class="separator:ac9035f34ba62d16e0e37bdaca67e37e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad429f374f5b86942b9561edce9c99082"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#ad429f374f5b86942b9561edce9c99082">POLARSSL_ECP_PF_COMPRESSED</a>&#160;&#160;&#160;1</td></tr>
<tr class="memdesc:ad429f374f5b86942b9561edce9c99082"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compressed point format.  <a href="#ad429f374f5b86942b9561edce9c99082">More...</a><br/></td></tr>
<tr class="separator:ad429f374f5b86942b9561edce9c99082"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8dd54f6888aed50a45a3ba56af003553"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a8dd54f6888aed50a45a3ba56af003553">POLARSSL_ECP_TLS_NAMED_CURVE</a>&#160;&#160;&#160;3</td></tr>
<tr class="memdesc:a8dd54f6888aed50a45a3ba56af003553"><td class="mdescLeft">&#160;</td><td class="mdescRight">ECCurveType's named_curve.  <a href="#a8dd54f6888aed50a45a3ba56af003553">More...</a><br/></td></tr>
<tr class="separator:a8dd54f6888aed50a45a3ba56af003553"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr><td colspan="2"><div class="groupHeader">SECTION: Module settings</div></td></tr>
<tr><td colspan="2"><div class="groupText"><p>The configuration options you can set for this module are in this section.</p>
<p>Either change them in <a class="el" href="config_8h.html" title="Configuration options (set of defines) ">config.h</a> or define them on the compiler command line. </p>
</div></td></tr>
<tr class="memitem:ab658f29021bf6d4a27feb3204b7c5248"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#ab658f29021bf6d4a27feb3204b7c5248">POLARSSL_ECP_MAX_BITS</a>&#160;&#160;&#160;521</td></tr>
<tr class="memdesc:ab658f29021bf6d4a27feb3204b7c5248"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum size of the groups (that is, of N and P)  <a href="#ab658f29021bf6d4a27feb3204b7c5248">More...</a><br/></td></tr>
<tr class="separator:ab658f29021bf6d4a27feb3204b7c5248"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1ef9d88cd3a37a2fef0267d1dfe72510"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a1ef9d88cd3a37a2fef0267d1dfe72510">POLARSSL_ECP_MAX_BYTES</a>&#160;&#160;&#160;( ( <a class="el" href="ecp_8h.html#ab658f29021bf6d4a27feb3204b7c5248">POLARSSL_ECP_MAX_BITS</a> + 7 ) / 8 )</td></tr>
<tr class="separator:a1ef9d88cd3a37a2fef0267d1dfe72510"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7c7d2c178fceae9dc252cc111cd845ef"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a7c7d2c178fceae9dc252cc111cd845ef">POLARSSL_ECP_MAX_PT_LEN</a>&#160;&#160;&#160;( 2 * <a class="el" href="ecp_8h.html#a1ef9d88cd3a37a2fef0267d1dfe72510">POLARSSL_ECP_MAX_BYTES</a> + 1 )</td></tr>
<tr class="separator:a7c7d2c178fceae9dc252cc111cd845ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a387aeb9fc0d3468b3d3fa47e9cabbf10"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a387aeb9fc0d3468b3d3fa47e9cabbf10">POLARSSL_ECP_WINDOW_SIZE</a>&#160;&#160;&#160;6</td></tr>
<tr class="memdesc:a387aeb9fc0d3468b3d3fa47e9cabbf10"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum window size used.  <a href="#a387aeb9fc0d3468b3d3fa47e9cabbf10">More...</a><br/></td></tr>
<tr class="separator:a387aeb9fc0d3468b3d3fa47e9cabbf10"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab4e509bdbb60ce679ed5072a4f4a7c97"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#ab4e509bdbb60ce679ed5072a4f4a7c97">POLARSSL_ECP_FIXED_POINT_OPTIM</a>&#160;&#160;&#160;1</td></tr>
<tr class="memdesc:ab4e509bdbb60ce679ed5072a4f4a7c97"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enable fixed-point speed-up.  <a href="#ab4e509bdbb60ce679ed5072a4f4a7c97">More...</a><br/></td></tr>
<tr class="separator:ab4e509bdbb60ce679ed5072a4f4a7c97"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:a751fce96f17826537221248b4ed5cbd2"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2">ecp_group_id</a> { <br/>
&#160;&#160;<a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2a46e7ea9155680f0e7ecb743045a83b58">POLARSSL_ECP_DP_NONE</a> = 0, 
<a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2ad7b0489f0d40a4f1c1b143d401977a2f">POLARSSL_ECP_DP_SECP192R1</a>, 
<a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2aa8b959db9beb4ac3fe805dd4caec6924">POLARSSL_ECP_DP_SECP224R1</a>, 
<a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2a13f6d2a908ca7d322ceb2a5d9f4dea6f">POLARSSL_ECP_DP_SECP256R1</a>, 
<br/>
&#160;&#160;<a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2a5c29d432a997b609e72af045b89609f0">POLARSSL_ECP_DP_SECP384R1</a>, 
<a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2a0dbfef81c231c728a458d4a62b219f44">POLARSSL_ECP_DP_SECP521R1</a>, 
<a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2aed9d986cfbd5e9c7ef26293e43cd3429">POLARSSL_ECP_DP_BP256R1</a>, 
<a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2a439f3384e485525b216e3e29c69c45cc">POLARSSL_ECP_DP_BP384R1</a>, 
<br/>
&#160;&#160;<a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2aeeb07a2080f671337ce152e41404dc01">POLARSSL_ECP_DP_BP512R1</a>, 
<a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2aab24cfe01379db4d78f14f98a08380c9">POLARSSL_ECP_DP_M221</a>, 
<a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2a4d83a75b39303fc11e35adaa56e0034d">POLARSSL_ECP_DP_M255</a>, 
<a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2aa5d5e98cbfa397abb3919db5ff60fcb1">POLARSSL_ECP_DP_M383</a>, 
<br/>
&#160;&#160;<a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2af2a5632edc1fe1cf10b334461bdab4be">POLARSSL_ECP_DP_M511</a>, 
<a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2a0b278617b5b1d73d288a094f3d62617a">POLARSSL_ECP_DP_SECP192K1</a>, 
<a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2a56360e39b811e7f040eb30179451c706">POLARSSL_ECP_DP_SECP224K1</a>, 
<a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2a7e82b353163bf3307dc5dc5e67e21751">POLARSSL_ECP_DP_SECP256K1</a>
<br/>
 }</td></tr>
<tr class="memdesc:a751fce96f17826537221248b4ed5cbd2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Domain parameters (curve, subgroup and generator) identifiers.  <a href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2">More...</a><br/></td></tr>
<tr class="separator:a751fce96f17826537221248b4ed5cbd2"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a922c198def595ceb873e92a5921c1a7d"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structecp__curve__info.html">ecp_curve_info</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a922c198def595ceb873e92a5921c1a7d">ecp_curve_list</a> (void)</td></tr>
<tr class="memdesc:a922c198def595ceb873e92a5921c1a7d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the list of supported curves in order of preferrence (full information)  <a href="#a922c198def595ceb873e92a5921c1a7d">More...</a><br/></td></tr>
<tr class="separator:a922c198def595ceb873e92a5921c1a7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac98810f90e8dd16117fc7df87865f601"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2">ecp_group_id</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#ac98810f90e8dd16117fc7df87865f601">ecp_grp_id_list</a> (void)</td></tr>
<tr class="memdesc:ac98810f90e8dd16117fc7df87865f601"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the list of supported curves in order of preferrence (grp_id only)  <a href="#ac98810f90e8dd16117fc7df87865f601">More...</a><br/></td></tr>
<tr class="separator:ac98810f90e8dd16117fc7df87865f601"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa101fa81835bbae3d81cc47ac6ba720a"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structecp__curve__info.html">ecp_curve_info</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#aa101fa81835bbae3d81cc47ac6ba720a">ecp_curve_info_from_grp_id</a> (<a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2">ecp_group_id</a> grp_id)</td></tr>
<tr class="memdesc:aa101fa81835bbae3d81cc47ac6ba720a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get curve information from an internal group identifier.  <a href="#aa101fa81835bbae3d81cc47ac6ba720a">More...</a><br/></td></tr>
<tr class="separator:aa101fa81835bbae3d81cc47ac6ba720a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aba258324a27e636af7defe9c8112b1b0"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structecp__curve__info.html">ecp_curve_info</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#aba258324a27e636af7defe9c8112b1b0">ecp_curve_info_from_tls_id</a> (uint16_t tls_id)</td></tr>
<tr class="memdesc:aba258324a27e636af7defe9c8112b1b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get curve information from a TLS NamedCurve value.  <a href="#aba258324a27e636af7defe9c8112b1b0">More...</a><br/></td></tr>
<tr class="separator:aba258324a27e636af7defe9c8112b1b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afd34beb5f2c6364b76ed732894fda83f"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structecp__curve__info.html">ecp_curve_info</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#afd34beb5f2c6364b76ed732894fda83f">ecp_curve_info_from_name</a> (const char *name)</td></tr>
<tr class="memdesc:afd34beb5f2c6364b76ed732894fda83f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get curve information from a human-readable name.  <a href="#afd34beb5f2c6364b76ed732894fda83f">More...</a><br/></td></tr>
<tr class="separator:afd34beb5f2c6364b76ed732894fda83f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a870fd59435f6519b4027050afe24fc7c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a870fd59435f6519b4027050afe24fc7c">ecp_point_init</a> (<a class="el" href="structecp__point.html">ecp_point</a> *pt)</td></tr>
<tr class="memdesc:a870fd59435f6519b4027050afe24fc7c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize a point (as zero)  <a href="#a870fd59435f6519b4027050afe24fc7c">More...</a><br/></td></tr>
<tr class="separator:a870fd59435f6519b4027050afe24fc7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9859e0bafd24035307f33c1aee570eef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a9859e0bafd24035307f33c1aee570eef">ecp_group_init</a> (<a class="el" href="structecp__group.html">ecp_group</a> *grp)</td></tr>
<tr class="memdesc:a9859e0bafd24035307f33c1aee570eef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize a group (to something meaningless)  <a href="#a9859e0bafd24035307f33c1aee570eef">More...</a><br/></td></tr>
<tr class="separator:a9859e0bafd24035307f33c1aee570eef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad319627ec2d6771c107958eba37857e8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#ad319627ec2d6771c107958eba37857e8">ecp_keypair_init</a> (<a class="el" href="structecp__keypair.html">ecp_keypair</a> *key)</td></tr>
<tr class="memdesc:ad319627ec2d6771c107958eba37857e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize a key pair (as an invalid one)  <a href="#ad319627ec2d6771c107958eba37857e8">More...</a><br/></td></tr>
<tr class="separator:ad319627ec2d6771c107958eba37857e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6a949f9b9194bbf02dc83d3aa0c61567"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a6a949f9b9194bbf02dc83d3aa0c61567">ecp_point_free</a> (<a class="el" href="structecp__point.html">ecp_point</a> *pt)</td></tr>
<tr class="memdesc:a6a949f9b9194bbf02dc83d3aa0c61567"><td class="mdescLeft">&#160;</td><td class="mdescRight">Free the components of a point.  <a href="#a6a949f9b9194bbf02dc83d3aa0c61567">More...</a><br/></td></tr>
<tr class="separator:a6a949f9b9194bbf02dc83d3aa0c61567"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acbb816c782b4d903a0f0fac9b9d7e748"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#acbb816c782b4d903a0f0fac9b9d7e748">ecp_group_free</a> (<a class="el" href="structecp__group.html">ecp_group</a> *grp)</td></tr>
<tr class="memdesc:acbb816c782b4d903a0f0fac9b9d7e748"><td class="mdescLeft">&#160;</td><td class="mdescRight">Free the components of an ECP group.  <a href="#acbb816c782b4d903a0f0fac9b9d7e748">More...</a><br/></td></tr>
<tr class="separator:acbb816c782b4d903a0f0fac9b9d7e748"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8c9caf072a4466fb8191a07a2927d367"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a8c9caf072a4466fb8191a07a2927d367">ecp_keypair_free</a> (<a class="el" href="structecp__keypair.html">ecp_keypair</a> *key)</td></tr>
<tr class="memdesc:a8c9caf072a4466fb8191a07a2927d367"><td class="mdescLeft">&#160;</td><td class="mdescRight">Free the components of a key pair.  <a href="#a8c9caf072a4466fb8191a07a2927d367">More...</a><br/></td></tr>
<tr class="separator:a8c9caf072a4466fb8191a07a2927d367"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4d192c7a9b2f415c40a9ec2dc955ea13"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a4d192c7a9b2f415c40a9ec2dc955ea13">ecp_copy</a> (<a class="el" href="structecp__point.html">ecp_point</a> *P, const <a class="el" href="structecp__point.html">ecp_point</a> *Q)</td></tr>
<tr class="memdesc:a4d192c7a9b2f415c40a9ec2dc955ea13"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy the contents of point Q into P.  <a href="#a4d192c7a9b2f415c40a9ec2dc955ea13">More...</a><br/></td></tr>
<tr class="separator:a4d192c7a9b2f415c40a9ec2dc955ea13"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aae1ffdfabe7a58a7d9a1fee29a792051"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#aae1ffdfabe7a58a7d9a1fee29a792051">ecp_group_copy</a> (<a class="el" href="structecp__group.html">ecp_group</a> *dst, const <a class="el" href="structecp__group.html">ecp_group</a> *src)</td></tr>
<tr class="memdesc:aae1ffdfabe7a58a7d9a1fee29a792051"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy the contents of a group object.  <a href="#aae1ffdfabe7a58a7d9a1fee29a792051">More...</a><br/></td></tr>
<tr class="separator:aae1ffdfabe7a58a7d9a1fee29a792051"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a35010124f97bfd47b2d9cc35fb682291"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a35010124f97bfd47b2d9cc35fb682291">ecp_set_zero</a> (<a class="el" href="structecp__point.html">ecp_point</a> *pt)</td></tr>
<tr class="memdesc:a35010124f97bfd47b2d9cc35fb682291"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set a point to zero.  <a href="#a35010124f97bfd47b2d9cc35fb682291">More...</a><br/></td></tr>
<tr class="separator:a35010124f97bfd47b2d9cc35fb682291"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab091c21f839189f606dfad0ef924af35"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#ab091c21f839189f606dfad0ef924af35">ecp_is_zero</a> (<a class="el" href="structecp__point.html">ecp_point</a> *pt)</td></tr>
<tr class="memdesc:ab091c21f839189f606dfad0ef924af35"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tell if a point is zero.  <a href="#ab091c21f839189f606dfad0ef924af35">More...</a><br/></td></tr>
<tr class="separator:ab091c21f839189f606dfad0ef924af35"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a42d7d6a91aab9a40f9945db90f5664d8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a42d7d6a91aab9a40f9945db90f5664d8">ecp_point_read_string</a> (<a class="el" href="structecp__point.html">ecp_point</a> *P, int radix, const char *x, const char *y)</td></tr>
<tr class="memdesc:a42d7d6a91aab9a40f9945db90f5664d8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Import a non-zero point from two ASCII strings.  <a href="#a42d7d6a91aab9a40f9945db90f5664d8">More...</a><br/></td></tr>
<tr class="separator:a42d7d6a91aab9a40f9945db90f5664d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af386d2126344b010b0ec7db582b7771c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#af386d2126344b010b0ec7db582b7771c">ecp_point_write_binary</a> (const <a class="el" href="structecp__group.html">ecp_group</a> *grp, const <a class="el" href="structecp__point.html">ecp_point</a> *P, int format, size_t *olen, unsigned char *buf, size_t buflen)</td></tr>
<tr class="memdesc:af386d2126344b010b0ec7db582b7771c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Export a point into unsigned binary data.  <a href="#af386d2126344b010b0ec7db582b7771c">More...</a><br/></td></tr>
<tr class="separator:af386d2126344b010b0ec7db582b7771c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a37ff6c0c75c54675c90747a68e210b02"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a37ff6c0c75c54675c90747a68e210b02">ecp_point_read_binary</a> (const <a class="el" href="structecp__group.html">ecp_group</a> *grp, <a class="el" href="structecp__point.html">ecp_point</a> *P, const unsigned char *buf, size_t ilen)</td></tr>
<tr class="memdesc:a37ff6c0c75c54675c90747a68e210b02"><td class="mdescLeft">&#160;</td><td class="mdescRight">Import a point from unsigned binary data.  <a href="#a37ff6c0c75c54675c90747a68e210b02">More...</a><br/></td></tr>
<tr class="separator:a37ff6c0c75c54675c90747a68e210b02"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6673012c82015c0b1908bb02d5360a96"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a6673012c82015c0b1908bb02d5360a96">ecp_tls_read_point</a> (const <a class="el" href="structecp__group.html">ecp_group</a> *grp, <a class="el" href="structecp__point.html">ecp_point</a> *pt, const unsigned char **buf, size_t len)</td></tr>
<tr class="memdesc:a6673012c82015c0b1908bb02d5360a96"><td class="mdescLeft">&#160;</td><td class="mdescRight">Import a point from a TLS ECPoint record.  <a href="#a6673012c82015c0b1908bb02d5360a96">More...</a><br/></td></tr>
<tr class="separator:a6673012c82015c0b1908bb02d5360a96"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0cee19b8786ac1b74b9af1cbdd3c1ac"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#ae0cee19b8786ac1b74b9af1cbdd3c1ac">ecp_tls_write_point</a> (const <a class="el" href="structecp__group.html">ecp_group</a> *grp, const <a class="el" href="structecp__point.html">ecp_point</a> *pt, int format, size_t *olen, unsigned char *buf, size_t blen)</td></tr>
<tr class="memdesc:ae0cee19b8786ac1b74b9af1cbdd3c1ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Export a point as a TLS ECPoint record.  <a href="#ae0cee19b8786ac1b74b9af1cbdd3c1ac">More...</a><br/></td></tr>
<tr class="separator:ae0cee19b8786ac1b74b9af1cbdd3c1ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aae12d1249a51715d00880740ea0b1e8f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#aae12d1249a51715d00880740ea0b1e8f">ecp_group_read_string</a> (<a class="el" href="structecp__group.html">ecp_group</a> *grp, int radix, const char *p, const char *b, const char *gx, const char *gy, const char *n)</td></tr>
<tr class="memdesc:aae12d1249a51715d00880740ea0b1e8f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Import an ECP group from null-terminated ASCII strings.  <a href="#aae12d1249a51715d00880740ea0b1e8f">More...</a><br/></td></tr>
<tr class="separator:aae12d1249a51715d00880740ea0b1e8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af245b6e35c32a231e18bf335de7de774"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#af245b6e35c32a231e18bf335de7de774">ecp_use_known_dp</a> (<a class="el" href="structecp__group.html">ecp_group</a> *grp, <a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2">ecp_group_id</a> index)</td></tr>
<tr class="memdesc:af245b6e35c32a231e18bf335de7de774"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set a group using well-known domain parameters.  <a href="#af245b6e35c32a231e18bf335de7de774">More...</a><br/></td></tr>
<tr class="separator:af245b6e35c32a231e18bf335de7de774"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a272a7ee626eea52fa8095a92606d8630"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a272a7ee626eea52fa8095a92606d8630">ecp_tls_read_group</a> (<a class="el" href="structecp__group.html">ecp_group</a> *grp, const unsigned char **buf, size_t len)</td></tr>
<tr class="memdesc:a272a7ee626eea52fa8095a92606d8630"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set a group from a TLS ECParameters record.  <a href="#a272a7ee626eea52fa8095a92606d8630">More...</a><br/></td></tr>
<tr class="separator:a272a7ee626eea52fa8095a92606d8630"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aadadbb4be3812ecf219cfd650b78c875"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#aadadbb4be3812ecf219cfd650b78c875">ecp_tls_write_group</a> (const <a class="el" href="structecp__group.html">ecp_group</a> *grp, size_t *olen, unsigned char *buf, size_t blen)</td></tr>
<tr class="memdesc:aadadbb4be3812ecf219cfd650b78c875"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write the TLS ECParameters record for a group.  <a href="#aadadbb4be3812ecf219cfd650b78c875">More...</a><br/></td></tr>
<tr class="separator:aadadbb4be3812ecf219cfd650b78c875"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a59b4740379580218d00c3f0904dda21f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a59b4740379580218d00c3f0904dda21f">ecp_add</a> (const <a class="el" href="structecp__group.html">ecp_group</a> *grp, <a class="el" href="structecp__point.html">ecp_point</a> *R, const <a class="el" href="structecp__point.html">ecp_point</a> *P, const <a class="el" href="structecp__point.html">ecp_point</a> *Q)</td></tr>
<tr class="memdesc:a59b4740379580218d00c3f0904dda21f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Addition: R = P + Q.  <a href="#a59b4740379580218d00c3f0904dda21f">More...</a><br/></td></tr>
<tr class="separator:a59b4740379580218d00c3f0904dda21f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a19c757a41a5c79d00ae86469b5c6e798"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a19c757a41a5c79d00ae86469b5c6e798">ecp_sub</a> (const <a class="el" href="structecp__group.html">ecp_group</a> *grp, <a class="el" href="structecp__point.html">ecp_point</a> *R, const <a class="el" href="structecp__point.html">ecp_point</a> *P, const <a class="el" href="structecp__point.html">ecp_point</a> *Q)</td></tr>
<tr class="memdesc:a19c757a41a5c79d00ae86469b5c6e798"><td class="mdescLeft">&#160;</td><td class="mdescRight">Subtraction: R = P - Q.  <a href="#a19c757a41a5c79d00ae86469b5c6e798">More...</a><br/></td></tr>
<tr class="separator:a19c757a41a5c79d00ae86469b5c6e798"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a337b0e41153f458872f7f73bad93711c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a337b0e41153f458872f7f73bad93711c">ecp_mul</a> (<a class="el" href="structecp__group.html">ecp_group</a> *grp, <a class="el" href="structecp__point.html">ecp_point</a> *R, const <a class="el" href="structmpi.html">mpi</a> *m, const <a class="el" href="structecp__point.html">ecp_point</a> *P, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)</td></tr>
<tr class="memdesc:a337b0e41153f458872f7f73bad93711c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multiplication by an integer: R = m * P (Not thread-safe to use same group in multiple threads)  <a href="#a337b0e41153f458872f7f73bad93711c">More...</a><br/></td></tr>
<tr class="separator:a337b0e41153f458872f7f73bad93711c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2b89dc1f1a90c6bd42fd1f927c2c6a13"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a2b89dc1f1a90c6bd42fd1f927c2c6a13">ecp_check_pubkey</a> (const <a class="el" href="structecp__group.html">ecp_group</a> *grp, const <a class="el" href="structecp__point.html">ecp_point</a> *pt)</td></tr>
<tr class="memdesc:a2b89dc1f1a90c6bd42fd1f927c2c6a13"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check that a point is a valid public key on this curve.  <a href="#a2b89dc1f1a90c6bd42fd1f927c2c6a13">More...</a><br/></td></tr>
<tr class="separator:a2b89dc1f1a90c6bd42fd1f927c2c6a13"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a939d1adc3c75e16c6f73269a980c9c4c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a939d1adc3c75e16c6f73269a980c9c4c">ecp_check_privkey</a> (const <a class="el" href="structecp__group.html">ecp_group</a> *grp, const <a class="el" href="structmpi.html">mpi</a> *d)</td></tr>
<tr class="memdesc:a939d1adc3c75e16c6f73269a980c9c4c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check that an mpi is a valid private key for this curve.  <a href="#a939d1adc3c75e16c6f73269a980c9c4c">More...</a><br/></td></tr>
<tr class="separator:a939d1adc3c75e16c6f73269a980c9c4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaf7e6813178463e3ebb15b0719d1d30a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#aaf7e6813178463e3ebb15b0719d1d30a">ecp_gen_keypair</a> (<a class="el" href="structecp__group.html">ecp_group</a> *grp, <a class="el" href="structmpi.html">mpi</a> *d, <a class="el" href="structecp__point.html">ecp_point</a> *Q, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)</td></tr>
<tr class="memdesc:aaf7e6813178463e3ebb15b0719d1d30a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate a keypair.  <a href="#aaf7e6813178463e3ebb15b0719d1d30a">More...</a><br/></td></tr>
<tr class="separator:aaf7e6813178463e3ebb15b0719d1d30a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acf20d0c6e6c0f372cd7f23456160c609"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#acf20d0c6e6c0f372cd7f23456160c609">ecp_gen_key</a> (<a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2">ecp_group_id</a> grp_id, <a class="el" href="structecp__keypair.html">ecp_keypair</a> *key, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)</td></tr>
<tr class="memdesc:acf20d0c6e6c0f372cd7f23456160c609"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate a keypair.  <a href="#acf20d0c6e6c0f372cd7f23456160c609">More...</a><br/></td></tr>
<tr class="separator:acf20d0c6e6c0f372cd7f23456160c609"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2fcf11c82174d4997ffb3214dc874d0c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecp_8h.html#a2fcf11c82174d4997ffb3214dc874d0c">ecp_self_test</a> (int verbose)</td></tr>
<tr class="memdesc:a2fcf11c82174d4997ffb3214dc874d0c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checkup routine.  <a href="#a2fcf11c82174d4997ffb3214dc874d0c">More...</a><br/></td></tr>
<tr class="separator:a2fcf11c82174d4997ffb3214dc874d0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Elliptic curves over GF(p) </p>
<p>Copyright (C) 2006-2013, Brainspark B.V.</p>
<p>This file is part of PolarSSL (<a href="http://www.polarssl.org">http://www.polarssl.org</a>) Lead Maintainer: Paul Bakker &lt;polarssl_maintainer at polarssl.org&gt;</p>
<p>All rights reserved.</p>
<p>This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.</p>
<p>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.</p>
<p>You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. </p>

<p>Definition in file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a class="anchor" id="a360bfb37c5abe58d6153f1e16936ea92"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ECP_DP_MAX&#160;&#160;&#160;12</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Number of supported curves (plus one for NONE). </p>
<p>(Montgomery curves excluded for now.) </p>

<p>Definition at line <a class="el" href="ecp_8h_source.html#l00082">82</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>

</div>
</div>
<a class="anchor" id="ab4e509bdbb60ce679ed5072a4f4a7c97"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ECP_FIXED_POINT_OPTIM&#160;&#160;&#160;1</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Enable fixed-point speed-up. </p>

<p>Definition at line <a class="el" href="ecp_8h_source.html#l00225">225</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>

</div>
</div>
<a class="anchor" id="ab658f29021bf6d4a27feb3204b7c5248"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ECP_MAX_BITS&#160;&#160;&#160;521</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Maximum size of the groups (that is, of N and P) </p>
<p>Maximum bit size of groups </p>

<p>Definition at line <a class="el" href="ecp_8h_source.html#l00183">183</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>

</div>
</div>
<a class="anchor" id="a1ef9d88cd3a37a2fef0267d1dfe72510"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ECP_MAX_BYTES&#160;&#160;&#160;( ( <a class="el" href="ecp_8h.html#ab658f29021bf6d4a27feb3204b7c5248">POLARSSL_ECP_MAX_BITS</a> + 7 ) / 8 )</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Definition at line <a class="el" href="ecp_8h_source.html#l00186">186</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>

</div>
</div>
<a class="anchor" id="a7c7d2c178fceae9dc252cc111cd845ef"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ECP_MAX_PT_LEN&#160;&#160;&#160;( 2 * <a class="el" href="ecp_8h.html#a1ef9d88cd3a37a2fef0267d1dfe72510">POLARSSL_ECP_MAX_BYTES</a> + 1 )</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Definition at line <a class="el" href="ecp_8h_source.html#l00187">187</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>

</div>
</div>
<a class="anchor" id="ad429f374f5b86942b9561edce9c99082"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ECP_PF_COMPRESSED&#160;&#160;&#160;1</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Compressed point format. </p>

<p>Definition at line <a class="el" href="ecp_8h_source.html#l00234">234</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>

</div>
</div>
<a class="anchor" id="ac9035f34ba62d16e0e37bdaca67e37e2"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ECP_PF_UNCOMPRESSED&#160;&#160;&#160;0</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Uncompressed point format. </p>

<p>Definition at line <a class="el" href="ecp_8h_source.html#l00233">233</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>

</div>
</div>
<a class="anchor" id="a8dd54f6888aed50a45a3ba56af003553"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ECP_TLS_NAMED_CURVE&#160;&#160;&#160;3</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>ECCurveType's named_curve. </p>

<p>Definition at line <a class="el" href="ecp_8h_source.html#l00239">239</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>

</div>
</div>
<a class="anchor" id="a387aeb9fc0d3468b3d3fa47e9cabbf10"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ECP_WINDOW_SIZE&#160;&#160;&#160;6</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Maximum window size used. </p>

<p>Definition at line <a class="el" href="ecp_8h_source.html#l00210">210</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>

</div>
</div>
<a class="anchor" id="a59e5b00eddc35acbb507340379c4d056"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_ECP_BAD_INPUT_DATA&#160;&#160;&#160;-0x4F80</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Bad input parameters to function. </p>

<p>Definition at line <a class="el" href="ecp_8h_source.html#l00035">35</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>

</div>
</div>
<a class="anchor" id="a5dde870beebeca665d636398cd084fba"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_ECP_BUFFER_TOO_SMALL&#160;&#160;&#160;-0x4F00</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The buffer is too small to write to. </p>

<p>Definition at line <a class="el" href="ecp_8h_source.html#l00036">36</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>

</div>
</div>
<a class="anchor" id="a87be7bf7e5b042e8ee3b73dbe5f3cc3a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE&#160;&#160;&#160;-0x4E80</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Requested curve not available. </p>

<p>Definition at line <a class="el" href="ecp_8h_source.html#l00037">37</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>

</div>
</div>
<a class="anchor" id="a200efec3d662151ea19bcd730807c769"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_ECP_INVALID_KEY&#160;&#160;&#160;-0x4C80</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Invalid private or public key. </p>

<p>Definition at line <a class="el" href="ecp_8h_source.html#l00041">41</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>

</div>
</div>
<a class="anchor" id="a01a0e6796f75c7bdd1a41312c4fa60c1"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_ECP_MALLOC_FAILED&#160;&#160;&#160;-0x4D80</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Memory allocation failed. </p>

<p>Definition at line <a class="el" href="ecp_8h_source.html#l00039">39</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>

</div>
</div>
<a class="anchor" id="a8de4c3d074d63c08f314012b604c98c8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_ECP_RANDOM_FAILED&#160;&#160;&#160;-0x4D00</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Generation of random value, such as (ephemeral) key, failed. </p>

<p>Definition at line <a class="el" href="ecp_8h_source.html#l00040">40</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>

</div>
</div>
<a class="anchor" id="a1d2b0f995bf076c5ce5bbc7deb94150c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_ECP_SIG_LEN_MISMATCH&#160;&#160;&#160;-0x4C00</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Signature is valid but shorter than the user-supplied length. </p>

<p>Definition at line <a class="el" href="ecp_8h_source.html#l00042">42</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>

</div>
</div>
<a class="anchor" id="a250e37c379fd853d666415a8fc308e6e"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define POLARSSL_ERR_ECP_VERIFY_FAILED&#160;&#160;&#160;-0x4E00</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The signature is not valid. </p>

<p>Definition at line <a class="el" href="ecp_8h_source.html#l00038">38</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>

</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="a751fce96f17826537221248b4ed5cbd2"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2">ecp_group_id</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Domain parameters (curve, subgroup and generator) identifiers. </p>
<p>Only curves over prime fields are supported.</p>
<dl class="section warning"><dt>Warning</dt><dd>This library does not support validation of arbitrary domain parameters. Therefore, only well-known domain parameters from trusted sources should be used. See <a class="el" href="ecp_8h.html#af245b6e35c32a231e18bf335de7de774" title="Set a group using well-known domain parameters. ">ecp_use_known_dp()</a>. </dd></dl>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a751fce96f17826537221248b4ed5cbd2a46e7ea9155680f0e7ecb743045a83b58"></a>POLARSSL_ECP_DP_NONE</em>&nbsp;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a751fce96f17826537221248b4ed5cbd2ad7b0489f0d40a4f1c1b143d401977a2f"></a>POLARSSL_ECP_DP_SECP192R1</em>&nbsp;</td><td class="fielddoc">
<p>192-bits NIST curve </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a751fce96f17826537221248b4ed5cbd2aa8b959db9beb4ac3fe805dd4caec6924"></a>POLARSSL_ECP_DP_SECP224R1</em>&nbsp;</td><td class="fielddoc">
<p>224-bits NIST curve </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a751fce96f17826537221248b4ed5cbd2a13f6d2a908ca7d322ceb2a5d9f4dea6f"></a>POLARSSL_ECP_DP_SECP256R1</em>&nbsp;</td><td class="fielddoc">
<p>256-bits NIST curve </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a751fce96f17826537221248b4ed5cbd2a5c29d432a997b609e72af045b89609f0"></a>POLARSSL_ECP_DP_SECP384R1</em>&nbsp;</td><td class="fielddoc">
<p>384-bits NIST curve </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a751fce96f17826537221248b4ed5cbd2a0dbfef81c231c728a458d4a62b219f44"></a>POLARSSL_ECP_DP_SECP521R1</em>&nbsp;</td><td class="fielddoc">
<p>521-bits NIST curve </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a751fce96f17826537221248b4ed5cbd2aed9d986cfbd5e9c7ef26293e43cd3429"></a>POLARSSL_ECP_DP_BP256R1</em>&nbsp;</td><td class="fielddoc">
<p>256-bits Brainpool curve </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a751fce96f17826537221248b4ed5cbd2a439f3384e485525b216e3e29c69c45cc"></a>POLARSSL_ECP_DP_BP384R1</em>&nbsp;</td><td class="fielddoc">
<p>384-bits Brainpool curve </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a751fce96f17826537221248b4ed5cbd2aeeb07a2080f671337ce152e41404dc01"></a>POLARSSL_ECP_DP_BP512R1</em>&nbsp;</td><td class="fielddoc">
<p>512-bits Brainpool curve </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a751fce96f17826537221248b4ed5cbd2aab24cfe01379db4d78f14f98a08380c9"></a>POLARSSL_ECP_DP_M221</em>&nbsp;</td><td class="fielddoc">
<p>(not implemented yet) </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a751fce96f17826537221248b4ed5cbd2a4d83a75b39303fc11e35adaa56e0034d"></a>POLARSSL_ECP_DP_M255</em>&nbsp;</td><td class="fielddoc">
<p>Curve25519 </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a751fce96f17826537221248b4ed5cbd2aa5d5e98cbfa397abb3919db5ff60fcb1"></a>POLARSSL_ECP_DP_M383</em>&nbsp;</td><td class="fielddoc">
<p>(not implemented yet) </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a751fce96f17826537221248b4ed5cbd2af2a5632edc1fe1cf10b334461bdab4be"></a>POLARSSL_ECP_DP_M511</em>&nbsp;</td><td class="fielddoc">
<p>(not implemented yet) </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a751fce96f17826537221248b4ed5cbd2a0b278617b5b1d73d288a094f3d62617a"></a>POLARSSL_ECP_DP_SECP192K1</em>&nbsp;</td><td class="fielddoc">
<p>192-bits "Koblitz" curve </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a751fce96f17826537221248b4ed5cbd2a56360e39b811e7f040eb30179451c706"></a>POLARSSL_ECP_DP_SECP224K1</em>&nbsp;</td><td class="fielddoc">
<p>224-bits "Koblitz" curve </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a751fce96f17826537221248b4ed5cbd2a7e82b353163bf3307dc5dc5e67e21751"></a>POLARSSL_ECP_DP_SECP256K1</em>&nbsp;</td><td class="fielddoc">
<p>256-bits "Koblitz" curve </p>
</td></tr>
</table>

<p>Definition at line <a class="el" href="ecp_8h_source.html#l00057">57</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p>

</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="a59b4740379580218d00c3f0904dda21f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_add </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structecp__group.html">ecp_group</a> *&#160;</td>
          <td class="paramname"><em>grp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>R</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>P</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>Q</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Addition: R = P + Q. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">grp</td><td>ECP group </td></tr>
    <tr><td class="paramname">R</td><td>Destination point </td></tr>
    <tr><td class="paramname">P</td><td>Left-hand point </td></tr>
    <tr><td class="paramname">Q</td><td>Right-hand point</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed</dd></dl>
<dl class="section note"><dt>Note</dt><dd>This function does not support Montgomery curves, such as Curve25519. </dd></dl>

</div>
</div>
<a class="anchor" id="a939d1adc3c75e16c6f73269a980c9c4c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_check_privkey </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structecp__group.html">ecp_group</a> *&#160;</td>
          <td class="paramname"><em>grp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>d</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Check that an mpi is a valid private key for this curve. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">grp</td><td>Group used </td></tr>
    <tr><td class="paramname">d</td><td>Integer to check</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if point is a valid private key, POLARSSL_ERR_ECP_INVALID_KEY otherwise.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>Uses bare components rather than an <a class="el" href="structecp__keypair.html" title="ECP key pair structure. ">ecp_keypair</a> structure in order to ease use with other structures such as <a class="el" href="structecdh__context.html" title="ECDH context structure. ">ecdh_context</a> of <a class="el" href="structecdsa__context.html" title="ECDSA context structure. ">ecdsa_context</a>. </dd></dl>

</div>
</div>
<a class="anchor" id="a2b89dc1f1a90c6bd42fd1f927c2c6a13"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_check_pubkey </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structecp__group.html">ecp_group</a> *&#160;</td>
          <td class="paramname"><em>grp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>pt</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Check that a point is a valid public key on this curve. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">grp</td><td>Curve/group the point should belong to </td></tr>
    <tr><td class="paramname">pt</td><td>Point to check</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if point is a valid public key, POLARSSL_ERR_ECP_INVALID_KEY otherwise.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>This function only checks the point is non-zero, has valid coordinates and lies on the curve, but not that it is indeed a multiple of G. This is additional check is more expensive, isn't required by standards, and shouldn't be necessary if the group used has a small cofactor. In particular, it is useless for the NIST groups which all have a cofactor of 1.</dd>
<dd>
Uses bare components rather than an <a class="el" href="structecp__keypair.html" title="ECP key pair structure. ">ecp_keypair</a> structure in order to ease use with other structures such as <a class="el" href="structecdh__context.html" title="ECDH context structure. ">ecdh_context</a> of <a class="el" href="structecdsa__context.html" title="ECDSA context structure. ">ecdsa_context</a>. </dd></dl>

</div>
</div>
<a class="anchor" id="a4d192c7a9b2f415c40a9ec2dc955ea13"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_copy </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>P</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>Q</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Copy the contents of point Q into P. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">P</td><td>Destination point </td></tr>
    <tr><td class="paramname">Q</td><td>Source point</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="aa101fa81835bbae3d81cc47ac6ba720a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="structecp__curve__info.html">ecp_curve_info</a>* ecp_curve_info_from_grp_id </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2">ecp_group_id</a>&#160;</td>
          <td class="paramname"><em>grp_id</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Get curve information from an internal group identifier. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">grp_id</td><td>A POLARSSL_ECP_DP_XXX value</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The associated curve information or NULL </dd></dl>

</div>
</div>
<a class="anchor" id="afd34beb5f2c6364b76ed732894fda83f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="structecp__curve__info.html">ecp_curve_info</a>* ecp_curve_info_from_name </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>name</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Get curve information from a human-readable name. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">name</td><td>The name</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The associated curve information or NULL </dd></dl>

</div>
</div>
<a class="anchor" id="aba258324a27e636af7defe9c8112b1b0"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="structecp__curve__info.html">ecp_curve_info</a>* ecp_curve_info_from_tls_id </td>
          <td>(</td>
          <td class="paramtype">uint16_t&#160;</td>
          <td class="paramname"><em>tls_id</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Get curve information from a TLS NamedCurve value. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">tls_id</td><td>A POLARSSL_ECP_DP_XXX value</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The associated curve information or NULL </dd></dl>

</div>
</div>
<a class="anchor" id="a922c198def595ceb873e92a5921c1a7d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="structecp__curve__info.html">ecp_curve_info</a>* ecp_curve_list </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Get the list of supported curves in order of preferrence (full information) </p>
<dl class="section return"><dt>Returns</dt><dd>A statically allocated array, the last entry is 0. </dd></dl>

</div>
</div>
<a class="anchor" id="acf20d0c6e6c0f372cd7f23456160c609"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_gen_key </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2">ecp_group_id</a>&#160;</td>
          <td class="paramname"><em>grp_id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structecp__keypair.html">ecp_keypair</a> *&#160;</td>
          <td class="paramname"><em>key</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int(*)(void *, unsigned char *, size_t)&#160;</td>
          <td class="paramname"><em>f_rng</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>p_rng</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Generate a keypair. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">grp_id</td><td>ECP group identifier </td></tr>
    <tr><td class="paramname">key</td><td>Destination keypair </td></tr>
    <tr><td class="paramname">f_rng</td><td>RNG function </td></tr>
    <tr><td class="paramname">p_rng</td><td>RNG parameter</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or a POLARSSL_ERR_ECP_XXX or POLARSSL_MPI_XXX error code </dd></dl>

</div>
</div>
<a class="anchor" id="aaf7e6813178463e3ebb15b0719d1d30a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_gen_keypair </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structecp__group.html">ecp_group</a> *&#160;</td>
          <td class="paramname"><em>grp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>d</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>Q</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int(*)(void *, unsigned char *, size_t)&#160;</td>
          <td class="paramname"><em>f_rng</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>p_rng</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Generate a keypair. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">grp</td><td>ECP group </td></tr>
    <tr><td class="paramname">d</td><td>Destination MPI (secret part) </td></tr>
    <tr><td class="paramname">Q</td><td>Destination point (public part) </td></tr>
    <tr><td class="paramname">f_rng</td><td>RNG function </td></tr>
    <tr><td class="paramname">p_rng</td><td>RNG parameter</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or a POLARSSL_ERR_ECP_XXX or POLARSSL_MPI_XXX error code</dd></dl>
<dl class="section note"><dt>Note</dt><dd>Uses bare components rather than an <a class="el" href="structecp__keypair.html" title="ECP key pair structure. ">ecp_keypair</a> structure in order to ease use with other structures such as <a class="el" href="structecdh__context.html" title="ECDH context structure. ">ecdh_context</a> of <a class="el" href="structecdsa__context.html" title="ECDSA context structure. ">ecdsa_context</a>. </dd></dl>

</div>
</div>
<a class="anchor" id="aae1ffdfabe7a58a7d9a1fee29a792051"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_group_copy </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structecp__group.html">ecp_group</a> *&#160;</td>
          <td class="paramname"><em>dst</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structecp__group.html">ecp_group</a> *&#160;</td>
          <td class="paramname"><em>src</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Copy the contents of a group object. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">dst</td><td>Destination group </td></tr>
    <tr><td class="paramname">src</td><td>Source group</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="acbb816c782b4d903a0f0fac9b9d7e748"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ecp_group_free </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structecp__group.html">ecp_group</a> *&#160;</td>
          <td class="paramname"><em>grp</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Free the components of an ECP group. </p>

</div>
</div>
<a class="anchor" id="a9859e0bafd24035307f33c1aee570eef"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ecp_group_init </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structecp__group.html">ecp_group</a> *&#160;</td>
          <td class="paramname"><em>grp</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Initialize a group (to something meaningless) </p>

</div>
</div>
<a class="anchor" id="aae12d1249a51715d00880740ea0b1e8f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_group_read_string </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structecp__group.html">ecp_group</a> *&#160;</td>
          <td class="paramname"><em>grp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>radix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>b</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>gx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>gy</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>n</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Import an ECP group from null-terminated ASCII strings. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">grp</td><td>Destination group </td></tr>
    <tr><td class="paramname">radix</td><td>Input numeric base </td></tr>
    <tr><td class="paramname">p</td><td>Prime modulus of the base field </td></tr>
    <tr><td class="paramname">b</td><td>Constant term in the equation </td></tr>
    <tr><td class="paramname">gx</td><td>The generator's X coordinate </td></tr>
    <tr><td class="paramname">gy</td><td>The generator's Y coordinate </td></tr>
    <tr><td class="paramname">n</td><td>The generator's order</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or a POLARSSL_ERR_MPI_XXX error code</dd></dl>
<dl class="section note"><dt>Note</dt><dd>Sets all fields except modp. </dd></dl>

</div>
</div>
<a class="anchor" id="ac98810f90e8dd16117fc7df87865f601"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2">ecp_group_id</a>* ecp_grp_id_list </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Get the list of supported curves in order of preferrence (grp_id only) </p>
<dl class="section return"><dt>Returns</dt><dd>A statically allocated array, terminated with POLARSSL_ECP_DP_NONE. </dd></dl>

</div>
</div>
<a class="anchor" id="ab091c21f839189f606dfad0ef924af35"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_is_zero </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>pt</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Tell if a point is zero. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">pt</td><td>Point to test</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>1 if point is zero, 0 otherwise </dd></dl>

</div>
</div>
<a class="anchor" id="a8c9caf072a4466fb8191a07a2927d367"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ecp_keypair_free </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structecp__keypair.html">ecp_keypair</a> *&#160;</td>
          <td class="paramname"><em>key</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Free the components of a key pair. </p>

</div>
</div>
<a class="anchor" id="ad319627ec2d6771c107958eba37857e8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ecp_keypair_init </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structecp__keypair.html">ecp_keypair</a> *&#160;</td>
          <td class="paramname"><em>key</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Initialize a key pair (as an invalid one) </p>

</div>
</div>
<a class="anchor" id="a337b0e41153f458872f7f73bad93711c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_mul </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structecp__group.html">ecp_group</a> *&#160;</td>
          <td class="paramname"><em>grp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>R</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmpi.html">mpi</a> *&#160;</td>
          <td class="paramname"><em>m</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>P</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int(*)(void *, unsigned char *, size_t)&#160;</td>
          <td class="paramname"><em>f_rng</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>p_rng</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Multiplication by an integer: R = m * P (Not thread-safe to use same group in multiple threads) </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">grp</td><td>ECP group </td></tr>
    <tr><td class="paramname">R</td><td>Destination point </td></tr>
    <tr><td class="paramname">m</td><td>Integer by which to multiply </td></tr>
    <tr><td class="paramname">P</td><td>Point to multiply </td></tr>
    <tr><td class="paramname">f_rng</td><td>RNG function (see notes) </td></tr>
    <tr><td class="paramname">p_rng</td><td>RNG parameter</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_ECP_INVALID_KEY if m is not a valid privkey or P is not a valid pubkey, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed</dd></dl>
<dl class="section note"><dt>Note</dt><dd>In order to prevent timing attacks, this function executes the exact same sequence of (base field) operations for any valid m. It avoids any if-branch or array index depending on the value of m.</dd>
<dd>
If f_rng is not NULL, it is used to randomize intermediate results in order to prevent potential timing attacks targeting these results. It is recommended to always provide a non-NULL f_rng (the overhead is negligible). </dd></dl>

</div>
</div>
<a class="anchor" id="a6a949f9b9194bbf02dc83d3aa0c61567"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ecp_point_free </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>pt</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Free the components of a point. </p>

</div>
</div>
<a class="anchor" id="a870fd59435f6519b4027050afe24fc7c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ecp_point_init </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>pt</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Initialize a point (as zero) </p>

</div>
</div>
<a class="anchor" id="a37ff6c0c75c54675c90747a68e210b02"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_point_read_binary </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structecp__group.html">ecp_group</a> *&#160;</td>
          <td class="paramname"><em>grp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>P</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned char *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>ilen</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Import a point from unsigned binary data. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">grp</td><td>Group to which the point should belong </td></tr>
    <tr><td class="paramname">P</td><td>Point to import </td></tr>
    <tr><td class="paramname">buf</td><td>Input buffer </td></tr>
    <tr><td class="paramname">ilen</td><td>Actual length of input</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_ECP_BAD_INPUT_DATA if input is invalid, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE if the point format is not implemented.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>This function does NOT check that the point actually belongs to the given group, see <a class="el" href="ecp_8h.html#a2b89dc1f1a90c6bd42fd1f927c2c6a13" title="Check that a point is a valid public key on this curve. ">ecp_check_pubkey()</a> for that. </dd></dl>

</div>
</div>
<a class="anchor" id="a42d7d6a91aab9a40f9945db90f5664d8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_point_read_string </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structecp__point.html">ecp_point</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>radix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>y</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Import a non-zero point from two ASCII strings. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">P</td><td>Destination point </td></tr>
    <tr><td class="paramname">radix</td><td>Input numeric base </td></tr>
    <tr><td class="paramname">x</td><td>First affine coordinate as a null-terminated string </td></tr>
    <tr><td class="paramname">y</td><td>Second affine coordinate as a null-terminated string</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or a POLARSSL_ERR_MPI_XXX error code </dd></dl>

</div>
</div>
<a class="anchor" id="af386d2126344b010b0ec7db582b7771c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_point_write_binary </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structecp__group.html">ecp_group</a> *&#160;</td>
          <td class="paramname"><em>grp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structecp__point.html">ecp_point</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>format</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&#160;</td>
          <td class="paramname"><em>olen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned char *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>buflen</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Export a point into unsigned binary data. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">grp</td><td>Group to which the point should belong </td></tr>
    <tr><td class="paramname">P</td><td>Point to export </td></tr>
    <tr><td class="paramname">format</td><td>Point format, should be a POLARSSL_ECP_PF_XXX macro </td></tr>
    <tr><td class="paramname">olen</td><td>Length of the actual output </td></tr>
    <tr><td class="paramname">buf</td><td>Output buffer </td></tr>
    <tr><td class="paramname">buflen</td><td>Length of the output buffer</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or POLARSSL_ERR_ECP_BAD_INPUT_DATA or POLARSSL_ERR_ECP_BUFFER_TOO_SMALL </dd></dl>

</div>
</div>
<a class="anchor" id="a2fcf11c82174d4997ffb3214dc874d0c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_self_test </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>verbose</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Checkup routine. </p>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or 1 if a test failed </dd></dl>

</div>
</div>
<a class="anchor" id="a35010124f97bfd47b2d9cc35fb682291"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_set_zero </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>pt</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set a point to zero. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">pt</td><td>Destination point</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed </dd></dl>

</div>
</div>
<a class="anchor" id="a19c757a41a5c79d00ae86469b5c6e798"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_sub </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structecp__group.html">ecp_group</a> *&#160;</td>
          <td class="paramname"><em>grp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>R</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>P</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>Q</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Subtraction: R = P - Q. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">grp</td><td>ECP group </td></tr>
    <tr><td class="paramname">R</td><td>Destination point </td></tr>
    <tr><td class="paramname">P</td><td>Left-hand point </td></tr>
    <tr><td class="paramname">Q</td><td>Right-hand point</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed</dd></dl>
<dl class="section note"><dt>Note</dt><dd>This function does not support Montgomery curves, such as Curve25519. </dd></dl>

</div>
</div>
<a class="anchor" id="a272a7ee626eea52fa8095a92606d8630"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_tls_read_group </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structecp__group.html">ecp_group</a> *&#160;</td>
          <td class="paramname"><em>grp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned char **&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>len</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set a group from a TLS ECParameters record. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">grp</td><td>Destination group </td></tr>
    <tr><td class="paramname">buf</td><td>&amp;(Start of input buffer) </td></tr>
    <tr><td class="paramname">len</td><td>Buffer length</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>O if successful, POLARSSL_ERR_MPI_XXX if initialization failed POLARSSL_ERR_ECP_BAD_INPUT_DATA if input is invalid </dd></dl>

</div>
</div>
<a class="anchor" id="a6673012c82015c0b1908bb02d5360a96"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_tls_read_point </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structecp__group.html">ecp_group</a> *&#160;</td>
          <td class="paramname"><em>grp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>pt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned char **&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>len</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Import a point from a TLS ECPoint record. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">grp</td><td>ECP group used </td></tr>
    <tr><td class="paramname">pt</td><td>Destination point </td></tr>
    <tr><td class="paramname">buf</td><td>$(Start of input buffer) </td></tr>
    <tr><td class="paramname">len</td><td>Buffer length</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>O if successful, POLARSSL_ERR_MPI_XXX if initialization failed POLARSSL_ERR_ECP_BAD_INPUT_DATA if input is invalid </dd></dl>

</div>
</div>
<a class="anchor" id="aadadbb4be3812ecf219cfd650b78c875"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_tls_write_group </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structecp__group.html">ecp_group</a> *&#160;</td>
          <td class="paramname"><em>grp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&#160;</td>
          <td class="paramname"><em>olen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned char *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>blen</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Write the TLS ECParameters record for a group. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">grp</td><td>ECP group used </td></tr>
    <tr><td class="paramname">olen</td><td>Number of bytes actually written </td></tr>
    <tr><td class="paramname">buf</td><td>Buffer to write to </td></tr>
    <tr><td class="paramname">blen</td><td>Buffer length</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or POLARSSL_ERR_ECP_BUFFER_TOO_SMALL </dd></dl>

</div>
</div>
<a class="anchor" id="ae0cee19b8786ac1b74b9af1cbdd3c1ac"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_tls_write_point </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structecp__group.html">ecp_group</a> *&#160;</td>
          <td class="paramname"><em>grp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structecp__point.html">ecp_point</a> *&#160;</td>
          <td class="paramname"><em>pt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>format</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&#160;</td>
          <td class="paramname"><em>olen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned char *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>blen</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Export a point as a TLS ECPoint record. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">grp</td><td>ECP group used </td></tr>
    <tr><td class="paramname">pt</td><td>Point to export </td></tr>
    <tr><td class="paramname">format</td><td>Export format </td></tr>
    <tr><td class="paramname">olen</td><td>length of data written </td></tr>
    <tr><td class="paramname">buf</td><td>Buffer to write to </td></tr>
    <tr><td class="paramname">blen</td><td>Buffer length</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if successful, or POLARSSL_ERR_ECP_BAD_INPUT_DATA or POLARSSL_ERR_ECP_BUFFER_TOO_SMALL </dd></dl>

</div>
</div>
<a class="anchor" id="af245b6e35c32a231e18bf335de7de774"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ecp_use_known_dp </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structecp__group.html">ecp_group</a> *&#160;</td>
          <td class="paramname"><em>grp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="ecp_8h.html#a751fce96f17826537221248b4ed5cbd2">ecp_group_id</a>&#160;</td>
          <td class="paramname"><em>index</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set a group using well-known domain parameters. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">grp</td><td>Destination group </td></tr>
    <tr><td class="paramname">index</td><td>Index in the list of well-known domain parameters</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>O if successful, POLARSSL_ERR_MPI_XXX if initialization failed POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE for unkownn groups</dd></dl>
<dl class="section note"><dt>Note</dt><dd>Index should be a value of RFC 4492's enum NamdeCurve, possibly in the form of a POLARSSL_ECP_DP_XXX macro. </dd></dl>

</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jul 31 2014 11:35:56 for PolarSSL v1.3.8 by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.5
</small></address>
</body>
</html>