blob: 30b1815fbdeb11cf287fd8928eaeb4ad7a2cc884 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.15"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>AMCL: mpin_FP256BN.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">AMCL
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.15 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_df7310d1a865926cc859bcfb1880083f.html">include</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#define-members">Macros</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">mpin_FP256BN.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>M-Pin Header file.
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;<a class="el" href="pair__FP256BN_8h_source.html">pair_FP256BN.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="pbc__support_8h_source.html">pbc_support.h</a>&quot;</code><br />
</div>
<p><a href="mpin__FP256BN_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="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ae6d455bf0e40f5beca75e56d56ee34d6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#ae6d455bf0e40f5beca75e56d56ee34d6">PGS_FP256BN</a>&#160;&#160;&#160;<a class="el" href="config__big__256__56_8h.html#ab45850a8aedd0d0a0a7c5f2cc09aba9e">MODBYTES_256_56</a></td></tr>
<tr class="separator:ae6d455bf0e40f5beca75e56d56ee34d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af4556d6f26693c2c84aa4a0eea28c171"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#af4556d6f26693c2c84aa4a0eea28c171">PFS_FP256BN</a>&#160;&#160;&#160;<a class="el" href="config__big__256__56_8h.html#ab45850a8aedd0d0a0a7c5f2cc09aba9e">MODBYTES_256_56</a></td></tr>
<tr class="separator:af4556d6f26693c2c84aa4a0eea28c171"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5bdbc339b8d614c9c4912a6b6040f4ec"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a5bdbc339b8d614c9c4912a6b6040f4ec">MPIN_OK</a>&#160;&#160;&#160;0</td></tr>
<tr class="separator:a5bdbc339b8d614c9c4912a6b6040f4ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1735b73fd12586e70fc971c85e088ffc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a1735b73fd12586e70fc971c85e088ffc">MPIN_INVALID_POINT</a>&#160;&#160;&#160;-14</td></tr>
<tr class="separator:a1735b73fd12586e70fc971c85e088ffc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad558e3e4522f6846ba98a0d3820faebd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#ad558e3e4522f6846ba98a0d3820faebd">MPIN_BAD_PIN</a>&#160;&#160;&#160;-19</td></tr>
<tr class="separator:ad558e3e4522f6846ba98a0d3820faebd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0497a29b4ff3af7cecba9ea4140af442"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a0497a29b4ff3af7cecba9ea4140af442">MPIN_PAS</a>&#160;&#160;&#160;16</td></tr>
<tr class="separator:a0497a29b4ff3af7cecba9ea4140af442"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15c5084bd08109c7edebf50db273e494"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a15c5084bd08109c7edebf50db273e494">MAXPIN</a>&#160;&#160;&#160;10000</td></tr>
<tr class="separator:a15c5084bd08109c7edebf50db273e494"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1bc47461f3417c96da72488c6030447e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a1bc47461f3417c96da72488c6030447e">PBLEN</a>&#160;&#160;&#160;14</td></tr>
<tr class="separator:a1bc47461f3417c96da72488c6030447e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeca90e1c1c62b70670514ffc18c9dfd4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#aeca90e1c1c62b70670514ffc18c9dfd4">MESSAGE_SIZE</a>&#160;&#160;&#160;256</td></tr>
<tr class="separator:aeca90e1c1c62b70670514ffc18c9dfd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af6a27dc78aa9c18d9a13381554341704"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#af6a27dc78aa9c18d9a13381554341704">M_SIZE_FP256BN</a>&#160;&#160;&#160;(<a class="el" href="mpin__FP512BN_8h.html#aeca90e1c1c62b70670514ffc18c9dfd4">MESSAGE_SIZE</a>+2*<a class="el" href="mpin__FP256BN_8h.html#af4556d6f26693c2c84aa4a0eea28c171">PFS_FP256BN</a>+1)</td></tr>
<tr class="separator:af6a27dc78aa9c18d9a13381554341704"><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:a940cb182cdb4add069db9594c2cd21c9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a940cb182cdb4add069db9594c2cd21c9">MPIN_FP256BN_GET_Y</a> (int h, int t, <a class="el" href="structoctet.html">octet</a> *O, <a class="el" href="structoctet.html">octet</a> *Y)</td></tr>
<tr class="memdesc:a940cb182cdb4add069db9594c2cd21c9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate Y=H(s,O), where s is epoch time, O is an octet, and H(.) is a hash function. <a href="#a940cb182cdb4add069db9594c2cd21c9">More...</a><br /></td></tr>
<tr class="separator:a940cb182cdb4add069db9594c2cd21c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14c27fadeccc841cd927b835291cd894"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a14c27fadeccc841cd927b835291cd894">MPIN_FP256BN_EXTRACT_FACTOR</a> (int h, <a class="el" href="structoctet.html">octet</a> *ID, int factor, int facbits, <a class="el" href="structoctet.html">octet</a> *CS)</td></tr>
<tr class="memdesc:a14c27fadeccc841cd927b835291cd894"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract a PIN number from a client secret. <a href="#a14c27fadeccc841cd927b835291cd894">More...</a><br /></td></tr>
<tr class="separator:a14c27fadeccc841cd927b835291cd894"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a93ccddd5fa79c9d15064878de50ef15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a93ccddd5fa79c9d15064878de50ef15a">MPIN_FP256BN_RESTORE_FACTOR</a> (int h, <a class="el" href="structoctet.html">octet</a> *ID, int factor, int facbits, <a class="el" href="structoctet.html">octet</a> *CS)</td></tr>
<tr class="memdesc:a93ccddd5fa79c9d15064878de50ef15a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract a PIN number from a client secret. <a href="#a93ccddd5fa79c9d15064878de50ef15a">More...</a><br /></td></tr>
<tr class="separator:a93ccddd5fa79c9d15064878de50ef15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9a6bc54f48285a6f5b9b86e790daede3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a9a6bc54f48285a6f5b9b86e790daede3">MPIN_FP256BN_EXTRACT_PIN</a> (int h, <a class="el" href="structoctet.html">octet</a> *ID, int pin, <a class="el" href="structoctet.html">octet</a> *CS)</td></tr>
<tr class="memdesc:a9a6bc54f48285a6f5b9b86e790daede3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract a PIN number from a client secret. <a href="#a9a6bc54f48285a6f5b9b86e790daede3">More...</a><br /></td></tr>
<tr class="separator:a9a6bc54f48285a6f5b9b86e790daede3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac825e84a08e3e55b8892c3317fd6512f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#ac825e84a08e3e55b8892c3317fd6512f">MPIN_FP256BN_CLIENT</a> (int h, int d, <a class="el" href="structoctet.html">octet</a> *ID, <a class="el" href="structcsprng.html">csprng</a> *R, <a class="el" href="structoctet.html">octet</a> *x, int pin, <a class="el" href="structoctet.html">octet</a> *T, <a class="el" href="structoctet.html">octet</a> *V, <a class="el" href="structoctet.html">octet</a> *U, <a class="el" href="structoctet.html">octet</a> *UT, <a class="el" href="structoctet.html">octet</a> *TP, <a class="el" href="structoctet.html">octet</a> *MESSAGE, int t, <a class="el" href="structoctet.html">octet</a> *y)</td></tr>
<tr class="memdesc:ac825e84a08e3e55b8892c3317fd6512f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform client side of the one-pass version of the M-Pin protocol. <a href="#ac825e84a08e3e55b8892c3317fd6512f">More...</a><br /></td></tr>
<tr class="separator:ac825e84a08e3e55b8892c3317fd6512f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae53e383a8705fcc79445f35dc3b81773"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#ae53e383a8705fcc79445f35dc3b81773">MPIN_FP256BN_CLIENT_1</a> (int h, int d, <a class="el" href="structoctet.html">octet</a> *ID, <a class="el" href="structcsprng.html">csprng</a> *R, <a class="el" href="structoctet.html">octet</a> *x, int pin, <a class="el" href="structoctet.html">octet</a> *T, <a class="el" href="structoctet.html">octet</a> *S, <a class="el" href="structoctet.html">octet</a> *U, <a class="el" href="structoctet.html">octet</a> *UT, <a class="el" href="structoctet.html">octet</a> *TP)</td></tr>
<tr class="memdesc:ae53e383a8705fcc79445f35dc3b81773"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform first pass of the client side of the 3-pass version of the M-Pin protocol. <a href="#ae53e383a8705fcc79445f35dc3b81773">More...</a><br /></td></tr>
<tr class="separator:ae53e383a8705fcc79445f35dc3b81773"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0432f36efcb34b10420238b5148e0a10"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a0432f36efcb34b10420238b5148e0a10">MPIN_FP256BN_RANDOM_GENERATE</a> (<a class="el" href="structcsprng.html">csprng</a> *R, <a class="el" href="structoctet.html">octet</a> *S)</td></tr>
<tr class="memdesc:a0432f36efcb34b10420238b5148e0a10"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate a random group element. <a href="#a0432f36efcb34b10420238b5148e0a10">More...</a><br /></td></tr>
<tr class="separator:a0432f36efcb34b10420238b5148e0a10"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7ca9c874f0e9f5a14f0c7ef6f377a37e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a7ca9c874f0e9f5a14f0c7ef6f377a37e">MPIN_FP256BN_CLIENT_2</a> (<a class="el" href="structoctet.html">octet</a> *x, <a class="el" href="structoctet.html">octet</a> *y, <a class="el" href="structoctet.html">octet</a> *V)</td></tr>
<tr class="memdesc:a7ca9c874f0e9f5a14f0c7ef6f377a37e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform second pass of the client side of the 3-pass version of the M-Pin protocol. <a href="#a7ca9c874f0e9f5a14f0c7ef6f377a37e">More...</a><br /></td></tr>
<tr class="separator:a7ca9c874f0e9f5a14f0c7ef6f377a37e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae3c5a1626d8cbc1eb78439b630ffb248"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#ae3c5a1626d8cbc1eb78439b630ffb248">MPIN_FP256BN_SERVER</a> (int h, int d, <a class="el" href="structoctet.html">octet</a> *HID, <a class="el" href="structoctet.html">octet</a> *HTID, <a class="el" href="structoctet.html">octet</a> *y, <a class="el" href="structoctet.html">octet</a> *SS, <a class="el" href="structoctet.html">octet</a> *U, <a class="el" href="structoctet.html">octet</a> *UT, <a class="el" href="structoctet.html">octet</a> *V, <a class="el" href="structoctet.html">octet</a> *E, <a class="el" href="structoctet.html">octet</a> *F, <a class="el" href="structoctet.html">octet</a> *ID, <a class="el" href="structoctet.html">octet</a> *MESSAGE, int t, <a class="el" href="structoctet.html">octet</a> *Pa)</td></tr>
<tr class="memdesc:ae3c5a1626d8cbc1eb78439b630ffb248"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform server side of the one-pass version of the M-Pin protocol. <a href="#ae3c5a1626d8cbc1eb78439b630ffb248">More...</a><br /></td></tr>
<tr class="separator:ae3c5a1626d8cbc1eb78439b630ffb248"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a76c09183b4aecfd7889dc82727f74b9a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a76c09183b4aecfd7889dc82727f74b9a">MPIN_FP256BN_SERVER_1</a> (int h, int d, <a class="el" href="structoctet.html">octet</a> *ID, <a class="el" href="structoctet.html">octet</a> *HID, <a class="el" href="structoctet.html">octet</a> *HTID)</td></tr>
<tr class="memdesc:a76c09183b4aecfd7889dc82727f74b9a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform first pass of the server side of the 3-pass version of the M-Pin protocol. <a href="#a76c09183b4aecfd7889dc82727f74b9a">More...</a><br /></td></tr>
<tr class="separator:a76c09183b4aecfd7889dc82727f74b9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab081821ee77dbe64e5c5af1283aef0a8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#ab081821ee77dbe64e5c5af1283aef0a8">MPIN_FP256BN_SERVER_2</a> (int d, <a class="el" href="structoctet.html">octet</a> *HID, <a class="el" href="structoctet.html">octet</a> *HTID, <a class="el" href="structoctet.html">octet</a> *y, <a class="el" href="structoctet.html">octet</a> *SS, <a class="el" href="structoctet.html">octet</a> *U, <a class="el" href="structoctet.html">octet</a> *UT, <a class="el" href="structoctet.html">octet</a> *V, <a class="el" href="structoctet.html">octet</a> *E, <a class="el" href="structoctet.html">octet</a> *F, <a class="el" href="structoctet.html">octet</a> *Pa)</td></tr>
<tr class="memdesc:ab081821ee77dbe64e5c5af1283aef0a8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform third pass on the server side of the 3-pass version of the M-Pin protocol. <a href="#ab081821ee77dbe64e5c5af1283aef0a8">More...</a><br /></td></tr>
<tr class="separator:ab081821ee77dbe64e5c5af1283aef0a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a936596b7ef90f580fb2f11c54e05cf4c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a936596b7ef90f580fb2f11c54e05cf4c">MPIN_FP256BN_RECOMBINE_G1</a> (<a class="el" href="structoctet.html">octet</a> *Q1, <a class="el" href="structoctet.html">octet</a> *Q2, <a class="el" href="structoctet.html">octet</a> *Q)</td></tr>
<tr class="memdesc:a936596b7ef90f580fb2f11c54e05cf4c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add two members from the group G1. <a href="#a936596b7ef90f580fb2f11c54e05cf4c">More...</a><br /></td></tr>
<tr class="separator:a936596b7ef90f580fb2f11c54e05cf4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a05096af9c57f1e2030aada1ef0c23816"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a05096af9c57f1e2030aada1ef0c23816">MPIN_FP256BN_RECOMBINE_G2</a> (<a class="el" href="structoctet.html">octet</a> *P1, <a class="el" href="structoctet.html">octet</a> *P2, <a class="el" href="structoctet.html">octet</a> *P)</td></tr>
<tr class="memdesc:a05096af9c57f1e2030aada1ef0c23816"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add two members from the group G2. <a href="#a05096af9c57f1e2030aada1ef0c23816">More...</a><br /></td></tr>
<tr class="separator:a05096af9c57f1e2030aada1ef0c23816"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a720fb275bb6f252d616d21924100b74d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a720fb275bb6f252d616d21924100b74d">MPIN_FP256BN_KANGAROO</a> (<a class="el" href="structoctet.html">octet</a> *E, <a class="el" href="structoctet.html">octet</a> *F)</td></tr>
<tr class="memdesc:a720fb275bb6f252d616d21924100b74d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Use Kangaroos to find PIN error. <a href="#a720fb275bb6f252d616d21924100b74d">More...</a><br /></td></tr>
<tr class="separator:a720fb275bb6f252d616d21924100b74d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac91190f464ef23a18c3713820597ee5f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#ac91190f464ef23a18c3713820597ee5f">MPIN_FP256BN_ENCODING</a> (<a class="el" href="structcsprng.html">csprng</a> *R, <a class="el" href="structoctet.html">octet</a> *TP)</td></tr>
<tr class="memdesc:ac91190f464ef23a18c3713820597ee5f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encoding of a Time Permit to make it indistinguishable from a random string. <a href="#ac91190f464ef23a18c3713820597ee5f">More...</a><br /></td></tr>
<tr class="separator:ac91190f464ef23a18c3713820597ee5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a478280d9c50fe8ab54a515981fa8ec3f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a478280d9c50fe8ab54a515981fa8ec3f">MPIN_FP256BN_DECODING</a> (<a class="el" href="structoctet.html">octet</a> *TP)</td></tr>
<tr class="memdesc:a478280d9c50fe8ab54a515981fa8ec3f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encoding of an obfuscated Time Permit. <a href="#a478280d9c50fe8ab54a515981fa8ec3f">More...</a><br /></td></tr>
<tr class="separator:a478280d9c50fe8ab54a515981fa8ec3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a76bf76447aea7453e4cc376e93408637"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a76bf76447aea7453e4cc376e93408637">MPIN_FP256BN_GET_G1_MULTIPLE</a> (<a class="el" href="structcsprng.html">csprng</a> *R, int type, <a class="el" href="structoctet.html">octet</a> *x, <a class="el" href="structoctet.html">octet</a> *G, <a class="el" href="structoctet.html">octet</a> *W)</td></tr>
<tr class="memdesc:a76bf76447aea7453e4cc376e93408637"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find a random multiple of a point in G1. <a href="#a76bf76447aea7453e4cc376e93408637">More...</a><br /></td></tr>
<tr class="separator:a76bf76447aea7453e4cc376e93408637"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8eae09b8ce8aba6eebb00848e751132b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a8eae09b8ce8aba6eebb00848e751132b">MPIN_FP256BN_GET_G2_MULTIPLE</a> (<a class="el" href="structcsprng.html">csprng</a> *R, int type, <a class="el" href="structoctet.html">octet</a> *x, <a class="el" href="structoctet.html">octet</a> *G, <a class="el" href="structoctet.html">octet</a> *W)</td></tr>
<tr class="memdesc:a8eae09b8ce8aba6eebb00848e751132b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find a random multiple of a point in G1. <a href="#a8eae09b8ce8aba6eebb00848e751132b">More...</a><br /></td></tr>
<tr class="separator:a8eae09b8ce8aba6eebb00848e751132b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a96787d183e7901cd212e42c9d221c0f1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a96787d183e7901cd212e42c9d221c0f1">MPIN_FP256BN_GET_CLIENT_SECRET</a> (<a class="el" href="structoctet.html">octet</a> *S, <a class="el" href="structoctet.html">octet</a> *ID, <a class="el" href="structoctet.html">octet</a> *CS)</td></tr>
<tr class="memdesc:a96787d183e7901cd212e42c9d221c0f1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a client secret in G1 from a master secret and the client ID. <a href="#a96787d183e7901cd212e42c9d221c0f1">More...</a><br /></td></tr>
<tr class="separator:a96787d183e7901cd212e42c9d221c0f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae97b295f965a14977fad9dfc04e62f95"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#ae97b295f965a14977fad9dfc04e62f95">MPIN_FP256BN_GET_CLIENT_PERMIT</a> (int h, int d, <a class="el" href="structoctet.html">octet</a> *S, <a class="el" href="structoctet.html">octet</a> *ID, <a class="el" href="structoctet.html">octet</a> *TP)</td></tr>
<tr class="memdesc:ae97b295f965a14977fad9dfc04e62f95"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a Time Permit in G1 from a master secret and the client ID. <a href="#ae97b295f965a14977fad9dfc04e62f95">More...</a><br /></td></tr>
<tr class="separator:ae97b295f965a14977fad9dfc04e62f95"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa060add8af65e7e2dbf793b94478a853"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#aa060add8af65e7e2dbf793b94478a853">MPIN_FP256BN_GET_SERVER_SECRET</a> (<a class="el" href="structoctet.html">octet</a> *S, <a class="el" href="structoctet.html">octet</a> *SS)</td></tr>
<tr class="memdesc:aa060add8af65e7e2dbf793b94478a853"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a server secret in G2 from a master secret. <a href="#aa060add8af65e7e2dbf793b94478a853">More...</a><br /></td></tr>
<tr class="separator:aa060add8af65e7e2dbf793b94478a853"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac76c9be8f714f897b9dedac5dd7e0d3a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#ac76c9be8f714f897b9dedac5dd7e0d3a">MPIN_FP256BN_PRECOMPUTE</a> (<a class="el" href="structoctet.html">octet</a> *T, <a class="el" href="structoctet.html">octet</a> *ID, <a class="el" href="structoctet.html">octet</a> *CP, <a class="el" href="structoctet.html">octet</a> *g1, <a class="el" href="structoctet.html">octet</a> *g2)</td></tr>
<tr class="memdesc:ac76c9be8f714f897b9dedac5dd7e0d3a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Precompute values for use by the client side of M-Pin Full. <a href="#ac76c9be8f714f897b9dedac5dd7e0d3a">More...</a><br /></td></tr>
<tr class="separator:ac76c9be8f714f897b9dedac5dd7e0d3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a92431ef2840b73fcc88e5b0930b342b9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a92431ef2840b73fcc88e5b0930b342b9">MPIN_FP256BN_SERVER_KEY</a> (int h, <a class="el" href="structoctet.html">octet</a> *Z, <a class="el" href="structoctet.html">octet</a> *SS, <a class="el" href="structoctet.html">octet</a> *w, <a class="el" href="structoctet.html">octet</a> *p, <a class="el" href="structoctet.html">octet</a> *I, <a class="el" href="structoctet.html">octet</a> *U, <a class="el" href="structoctet.html">octet</a> *UT, <a class="el" href="structoctet.html">octet</a> *K)</td></tr>
<tr class="memdesc:a92431ef2840b73fcc88e5b0930b342b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate Key on Server side for M-Pin Full. <a href="#a92431ef2840b73fcc88e5b0930b342b9">More...</a><br /></td></tr>
<tr class="separator:a92431ef2840b73fcc88e5b0930b342b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad24166990f7e8004a8118c2a1ccb753d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#ad24166990f7e8004a8118c2a1ccb753d">MPIN_FP256BN_CLIENT_KEY</a> (int h, <a class="el" href="structoctet.html">octet</a> *g1, <a class="el" href="structoctet.html">octet</a> *g2, int pin, <a class="el" href="structoctet.html">octet</a> *r, <a class="el" href="structoctet.html">octet</a> *x, <a class="el" href="structoctet.html">octet</a> *p, <a class="el" href="structoctet.html">octet</a> *T, <a class="el" href="structoctet.html">octet</a> *K)</td></tr>
<tr class="memdesc:ad24166990f7e8004a8118c2a1ccb753d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate Key on Client side for M-Pin Full. <a href="#ad24166990f7e8004a8118c2a1ccb753d">More...</a><br /></td></tr>
<tr class="separator:ad24166990f7e8004a8118c2a1ccb753d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ee769f5c0d68a60e846926127e61592"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpin__FP256BN_8h.html#a3ee769f5c0d68a60e846926127e61592">MPIN_FP256BN_GET_DVS_KEYPAIR</a> (<a class="el" href="structcsprng.html">csprng</a> *R, <a class="el" href="structoctet.html">octet</a> *Z, <a class="el" href="structoctet.html">octet</a> *Pa)</td></tr>
<tr class="memdesc:a3ee769f5c0d68a60e846926127e61592"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generates a random public key for the client z.Q. <a href="#a3ee769f5c0d68a60e846926127e61592">More...</a><br /></td></tr>
<tr class="separator:a3ee769f5c0d68a60e846926127e61592"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><dl class="section author"><dt>Author</dt><dd>Mike Scott </dd></dl>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a id="af6a27dc78aa9c18d9a13381554341704"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af6a27dc78aa9c18d9a13381554341704">&#9670;&nbsp;</a></span>M_SIZE_FP256BN</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define M_SIZE_FP256BN&#160;&#160;&#160;(<a class="el" href="mpin__FP512BN_8h.html#aeca90e1c1c62b70670514ffc18c9dfd4">MESSAGE_SIZE</a>+2*<a class="el" href="mpin__FP256BN_8h.html#af4556d6f26693c2c84aa4a0eea28c171">PFS_FP256BN</a>+1)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Signature message size and G1 size </p>
</div>
</div>
<a id="a15c5084bd08109c7edebf50db273e494"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a15c5084bd08109c7edebf50db273e494">&#9670;&nbsp;</a></span>MAXPIN</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MAXPIN&#160;&#160;&#160;10000</td>
</tr>
</table>
</div><div class="memdoc">
<p>max PIN </p>
</div>
</div>
<a id="aeca90e1c1c62b70670514ffc18c9dfd4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeca90e1c1c62b70670514ffc18c9dfd4">&#9670;&nbsp;</a></span>MESSAGE_SIZE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MESSAGE_SIZE&#160;&#160;&#160;256</td>
</tr>
</table>
</div><div class="memdoc">
<p>Signature message size </p>
</div>
</div>
<a id="ad558e3e4522f6846ba98a0d3820faebd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad558e3e4522f6846ba98a0d3820faebd">&#9670;&nbsp;</a></span>MPIN_BAD_PIN</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MPIN_BAD_PIN&#160;&#160;&#160;-19</td>
</tr>
</table>
</div><div class="memdoc">
<p>Bad PIN number entered </p>
</div>
</div>
<a id="a1735b73fd12586e70fc971c85e088ffc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1735b73fd12586e70fc971c85e088ffc">&#9670;&nbsp;</a></span>MPIN_INVALID_POINT</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MPIN_INVALID_POINT&#160;&#160;&#160;-14</td>
</tr>
</table>
</div><div class="memdoc">
<p>Point is NOT on the curve </p>
</div>
</div>
<a id="a5bdbc339b8d614c9c4912a6b6040f4ec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5bdbc339b8d614c9c4912a6b6040f4ec">&#9670;&nbsp;</a></span>MPIN_OK</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MPIN_OK&#160;&#160;&#160;0</td>
</tr>
</table>
</div><div class="memdoc">
<p>Function completed without error </p>
</div>
</div>
<a id="a0497a29b4ff3af7cecba9ea4140af442"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0497a29b4ff3af7cecba9ea4140af442">&#9670;&nbsp;</a></span>MPIN_PAS</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MPIN_PAS&#160;&#160;&#160;16</td>
</tr>
</table>
</div><div class="memdoc">
<p>MPIN Symmetric Key Size </p>
</div>
</div>
<a id="a1bc47461f3417c96da72488c6030447e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1bc47461f3417c96da72488c6030447e">&#9670;&nbsp;</a></span>PBLEN</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define PBLEN&#160;&#160;&#160;14</td>
</tr>
</table>
</div><div class="memdoc">
<p>max length of PIN in bits </p>
</div>
</div>
<a id="af4556d6f26693c2c84aa4a0eea28c171"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af4556d6f26693c2c84aa4a0eea28c171">&#9670;&nbsp;</a></span>PFS_FP256BN</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define PFS_FP256BN&#160;&#160;&#160;<a class="el" href="config__big__256__56_8h.html#ab45850a8aedd0d0a0a7c5f2cc09aba9e">MODBYTES_256_56</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>MPIN Field Size </p>
</div>
</div>
<a id="ae6d455bf0e40f5beca75e56d56ee34d6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae6d455bf0e40f5beca75e56d56ee34d6">&#9670;&nbsp;</a></span>PGS_FP256BN</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define PGS_FP256BN&#160;&#160;&#160;<a class="el" href="config__big__256__56_8h.html#ab45850a8aedd0d0a0a7c5f2cc09aba9e">MODBYTES_256_56</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>MPIN Group Size </p>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ac825e84a08e3e55b8892c3317fd6512f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac825e84a08e3e55b8892c3317fd6512f">&#9670;&nbsp;</a></span>MPIN_FP256BN_CLIENT()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_CLIENT </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>d</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>ID</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structcsprng.html">csprng</a> *&#160;</td>
<td class="paramname"><em>R</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>pin</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>T</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>V</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>U</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>UT</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>TP</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>MESSAGE</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>t</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>y</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>If Time Permits are disabled, set d = 0, and UT is not generated and can be set to NULL. If Time Permits are enabled, and PIN error detection is OFF, U is not generated and can be set to NULL. If Time Permits are enabled, and PIN error detection is ON, U and UT are both generated. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">h</td><td>is the hash type </td></tr>
<tr><td class="paramname">d</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled </td></tr>
<tr><td class="paramname">ID</td><td>is the input client identity </td></tr>
<tr><td class="paramname">R</td><td>is a pointer to a cryptographically secure random number generator </td></tr>
<tr><td class="paramname">x</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input </td></tr>
<tr><td class="paramname">pin</td><td>is the input PIN number </td></tr>
<tr><td class="paramname">T</td><td>is the input M-Pin token (the client secret with PIN portion removed) </td></tr>
<tr><td class="paramname">V</td><td>is output = -(x+y)(CS+TP), where CS is the reconstructed client secret, and TP is the time permit </td></tr>
<tr><td class="paramname">U</td><td>is output = x.H(ID) </td></tr>
<tr><td class="paramname">UT</td><td>is output = x.(H(ID)+H(d|H(ID))) </td></tr>
<tr><td class="paramname">TP</td><td>is the input time permit </td></tr>
<tr><td class="paramname">MESSAGE</td><td>is the message to be signed </td></tr>
<tr><td class="paramname">t</td><td>is input epoch time in seconds - a timestamp </td></tr>
<tr><td class="paramname">y</td><td>is output H(t|U) or H(t|UT) if Time Permits enabled </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="ae53e383a8705fcc79445f35dc3b81773"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae53e383a8705fcc79445f35dc3b81773">&#9670;&nbsp;</a></span>MPIN_FP256BN_CLIENT_1()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_CLIENT_1 </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>d</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>ID</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structcsprng.html">csprng</a> *&#160;</td>
<td class="paramname"><em>R</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>pin</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>T</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>S</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>U</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>UT</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>TP</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>If Time Permits are disabled, set d = 0, and UT is not generated and can be set to NULL. If Time Permits are enabled, and PIN error detection is OFF, U is not generated and can be set to NULL. If Time Permits are enabled, and PIN error detection is ON, U and UT are both generated. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">h</td><td>is the hash type </td></tr>
<tr><td class="paramname">d</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled </td></tr>
<tr><td class="paramname">ID</td><td>is the input client identity </td></tr>
<tr><td class="paramname">R</td><td>is a pointer to a cryptographically secure random number generator </td></tr>
<tr><td class="paramname">x</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input </td></tr>
<tr><td class="paramname">pin</td><td>is the input PIN number </td></tr>
<tr><td class="paramname">T</td><td>is the input M-Pin token (the client secret with PIN portion removed) </td></tr>
<tr><td class="paramname">S</td><td>is output = CS+TP, where CS=is the reconstructed client secret, and TP is the time permit </td></tr>
<tr><td class="paramname">U</td><td>is output = x.H(ID) </td></tr>
<tr><td class="paramname">UT</td><td>is output = x.(H(ID)+H(d|H(ID))) </td></tr>
<tr><td class="paramname">TP</td><td>is the input time permit </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="a7ca9c874f0e9f5a14f0c7ef6f377a37e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7ca9c874f0e9f5a14f0c7ef6f377a37e">&#9670;&nbsp;</a></span>MPIN_FP256BN_CLIENT_2()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_CLIENT_2 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>V</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">x</td><td>an input, a locally generated random number </td></tr>
<tr><td class="paramname">y</td><td>an input random challenge from the server </td></tr>
<tr><td class="paramname">V</td><td>on output = -(x+y).V </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="ad24166990f7e8004a8118c2a1ccb753d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad24166990f7e8004a8118c2a1ccb753d">&#9670;&nbsp;</a></span>MPIN_FP256BN_CLIENT_KEY()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_CLIENT_KEY </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>g1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>g2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>pin</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>r</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>T</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>K</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">h</td><td>is the hash type </td></tr>
<tr><td class="paramname">g1</td><td>precomputed input </td></tr>
<tr><td class="paramname">g2</td><td>precomputed input </td></tr>
<tr><td class="paramname">pin</td><td>is the input PIN number </td></tr>
<tr><td class="paramname">r</td><td>is an input, a locally generated random number </td></tr>
<tr><td class="paramname">x</td><td>is an input, a locally generated random number </td></tr>
<tr><td class="paramname">p</td><td>is an input, hash of the protocol transcript </td></tr>
<tr><td class="paramname">T</td><td>is the input Server-side Diffie-Hellman component </td></tr>
<tr><td class="paramname">K</td><td>is the output calculated shared key </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="a478280d9c50fe8ab54a515981fa8ec3f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a478280d9c50fe8ab54a515981fa8ec3f">&#9670;&nbsp;</a></span>MPIN_FP256BN_DECODING()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_DECODING </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>TP</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">TP</td><td>is the input obfuscated time permit, restored on output </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="ac91190f464ef23a18c3713820597ee5f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac91190f464ef23a18c3713820597ee5f">&#9670;&nbsp;</a></span>MPIN_FP256BN_ENCODING()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_ENCODING </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structcsprng.html">csprng</a> *&#160;</td>
<td class="paramname"><em>R</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>TP</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">R</td><td>is a pointer to a cryptographically secure random number generator </td></tr>
<tr><td class="paramname">TP</td><td>is the input time permit, obfuscated on output </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="a14c27fadeccc841cd927b835291cd894"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a14c27fadeccc841cd927b835291cd894">&#9670;&nbsp;</a></span>MPIN_FP256BN_EXTRACT_FACTOR()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_EXTRACT_FACTOR </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>ID</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>factor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>facbits</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>CS</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">h</td><td>is the hash type </td></tr>
<tr><td class="paramname">ID</td><td>is the input client identity </td></tr>
<tr><td class="paramname">factor</td><td>is an input factor </td></tr>
<tr><td class="paramname">facbits</td><td>is the number of bits in the factor </td></tr>
<tr><td class="paramname">CS</td><td>is the client secret from which the factor is to be extracted </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="a9a6bc54f48285a6f5b9b86e790daede3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9a6bc54f48285a6f5b9b86e790daede3">&#9670;&nbsp;</a></span>MPIN_FP256BN_EXTRACT_PIN()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_EXTRACT_PIN </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>ID</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>pin</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>CS</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">h</td><td>is the hash type </td></tr>
<tr><td class="paramname">ID</td><td>is the input client identity </td></tr>
<tr><td class="paramname">pin</td><td>is an input PIN number </td></tr>
<tr><td class="paramname">CS</td><td>is the client secret from which the PIN is to be extracted </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="ae97b295f965a14977fad9dfc04e62f95"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae97b295f965a14977fad9dfc04e62f95">&#9670;&nbsp;</a></span>MPIN_FP256BN_GET_CLIENT_PERMIT()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_GET_CLIENT_PERMIT </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>d</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>S</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>ID</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>TP</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">h</td><td>is the hash type </td></tr>
<tr><td class="paramname">d</td><td>is input date, in days since the epoch. </td></tr>
<tr><td class="paramname">S</td><td>is an input master secret </td></tr>
<tr><td class="paramname">ID</td><td>is the input client identity </td></tr>
<tr><td class="paramname">TP</td><td>is a Time Permit for the given date = s.H(d|H(ID)) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="a96787d183e7901cd212e42c9d221c0f1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a96787d183e7901cd212e42c9d221c0f1">&#9670;&nbsp;</a></span>MPIN_FP256BN_GET_CLIENT_SECRET()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_GET_CLIENT_SECRET </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>S</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>ID</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>CS</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">S</td><td>is an input master secret </td></tr>
<tr><td class="paramname">ID</td><td>is the input client identity </td></tr>
<tr><td class="paramname">CS</td><td>is the full client secret = s.H(ID) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="a3ee769f5c0d68a60e846926127e61592"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3ee769f5c0d68a60e846926127e61592">&#9670;&nbsp;</a></span>MPIN_FP256BN_GET_DVS_KEYPAIR()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_GET_DVS_KEYPAIR </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structcsprng.html">csprng</a> *&#160;</td>
<td class="paramname"><em>R</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>Z</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>Pa</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<pre class="fragment">@param R is a pointer to a cryptographically secure random number generator
@param Z an output internally randomly generated if R!=NULL, otherwise it must be provided as an input
@param Pa the output public key for the client
</pre>
</div>
</div>
<a id="a76bf76447aea7453e4cc376e93408637"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a76bf76447aea7453e4cc376e93408637">&#9670;&nbsp;</a></span>MPIN_FP256BN_GET_G1_MULTIPLE()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_GET_G1_MULTIPLE </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structcsprng.html">csprng</a> *&#160;</td>
<td class="paramname"><em>R</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>type</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>G</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>W</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">R</td><td>is a pointer to a cryptographically secure random number generator </td></tr>
<tr><td class="paramname">type</td><td>determines type of action to be taken </td></tr>
<tr><td class="paramname">x</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input </td></tr>
<tr><td class="paramname">G</td><td>if type=0 a point in G1, else an octet to be mapped to G1 </td></tr>
<tr><td class="paramname">W</td><td>the output =x.G or x.M(G), where M(.) is a mapping </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="a8eae09b8ce8aba6eebb00848e751132b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8eae09b8ce8aba6eebb00848e751132b">&#9670;&nbsp;</a></span>MPIN_FP256BN_GET_G2_MULTIPLE()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_GET_G2_MULTIPLE </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structcsprng.html">csprng</a> *&#160;</td>
<td class="paramname"><em>R</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>type</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>G</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>W</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">R</td><td>is a pointer to a cryptographically secure random number generator </td></tr>
<tr><td class="paramname">type</td><td>determines type of action to betaken </td></tr>
<tr><td class="paramname">x</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input </td></tr>
<tr><td class="paramname">G</td><td>a point in G2 </td></tr>
<tr><td class="paramname">W</td><td>the output =x.G or (1/x).G </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="aa060add8af65e7e2dbf793b94478a853"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa060add8af65e7e2dbf793b94478a853">&#9670;&nbsp;</a></span>MPIN_FP256BN_GET_SERVER_SECRET()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_GET_SERVER_SECRET </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>S</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>SS</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">S</td><td>is an input master secret </td></tr>
<tr><td class="paramname">SS</td><td>is the server secret = s.Q where Q is a fixed generator of G2 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="a940cb182cdb4add069db9594c2cd21c9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a940cb182cdb4add069db9594c2cd21c9">&#9670;&nbsp;</a></span>MPIN_FP256BN_GET_Y()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void MPIN_FP256BN_GET_Y </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>t</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>O</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>Y</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">h</td><td>is the hash type </td></tr>
<tr><td class="paramname">t</td><td>is epoch time in seconds </td></tr>
<tr><td class="paramname">O</td><td>is an input octet </td></tr>
<tr><td class="paramname">Y</td><td>is the output octet </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a720fb275bb6f252d616d21924100b74d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a720fb275bb6f252d616d21924100b74d">&#9670;&nbsp;</a></span>MPIN_FP256BN_KANGAROO()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_KANGAROO </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>E</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>F</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">E</td><td>a member of the group GT </td></tr>
<tr><td class="paramname">F</td><td>a member of the group GT = E^e </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if Kangaroos failed, or the PIN error e </dd></dl>
</div>
</div>
<a id="ac76c9be8f714f897b9dedac5dd7e0d3a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac76c9be8f714f897b9dedac5dd7e0d3a">&#9670;&nbsp;</a></span>MPIN_FP256BN_PRECOMPUTE()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_PRECOMPUTE </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>T</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>ID</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>CP</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>g1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>g2</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">T</td><td>is the input M-Pin token (the client secret with PIN portion removed) </td></tr>
<tr><td class="paramname">ID</td><td>is the input client identity </td></tr>
<tr><td class="paramname">CP</td><td>is Public Key (or NULL) </td></tr>
<tr><td class="paramname">g1</td><td>precomputed output </td></tr>
<tr><td class="paramname">g2</td><td>precomputed output </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="a0432f36efcb34b10420238b5148e0a10"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0432f36efcb34b10420238b5148e0a10">&#9670;&nbsp;</a></span>MPIN_FP256BN_RANDOM_GENERATE()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_RANDOM_GENERATE </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structcsprng.html">csprng</a> *&#160;</td>
<td class="paramname"><em>R</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>S</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">R</td><td>is a pointer to a cryptographically secure random number generator </td></tr>
<tr><td class="paramname">S</td><td>is the output random octet </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="a936596b7ef90f580fb2f11c54e05cf4c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a936596b7ef90f580fb2f11c54e05cf4c">&#9670;&nbsp;</a></span>MPIN_FP256BN_RECOMBINE_G1()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_RECOMBINE_G1 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>Q1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>Q2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>Q</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">Q1</td><td>an input member of G1 </td></tr>
<tr><td class="paramname">Q2</td><td>an input member of G1 </td></tr>
<tr><td class="paramname">Q</td><td>an output member of G1 = Q1+Q2 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="a05096af9c57f1e2030aada1ef0c23816"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a05096af9c57f1e2030aada1ef0c23816">&#9670;&nbsp;</a></span>MPIN_FP256BN_RECOMBINE_G2()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_RECOMBINE_G2 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>P1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>P2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>P</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">P1</td><td>an input member of G2 </td></tr>
<tr><td class="paramname">P2</td><td>an input member of G2 </td></tr>
<tr><td class="paramname">P</td><td>an output member of G2 = P1+P2 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="a93ccddd5fa79c9d15064878de50ef15a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a93ccddd5fa79c9d15064878de50ef15a">&#9670;&nbsp;</a></span>MPIN_FP256BN_RESTORE_FACTOR()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_RESTORE_FACTOR </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>ID</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>factor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>facbits</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>CS</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">h</td><td>is the hash type </td></tr>
<tr><td class="paramname">ID</td><td>is the input client identity </td></tr>
<tr><td class="paramname">factor</td><td>is an input factor </td></tr>
<tr><td class="paramname">facbits</td><td>is the number of bits in the factor </td></tr>
<tr><td class="paramname">CS</td><td>is the client secret to which the factor is to be added </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="ae3c5a1626d8cbc1eb78439b630ffb248"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae3c5a1626d8cbc1eb78439b630ffb248">&#9670;&nbsp;</a></span>MPIN_FP256BN_SERVER()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_SERVER </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>d</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>HID</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>HTID</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>SS</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>U</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>UT</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>V</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>E</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>F</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>ID</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>MESSAGE</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>t</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>Pa</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>If Time Permits are disabled, set d = 0, and UT and HTID are not generated and can be set to NULL. If Time Permits are enabled, and PIN error detection is OFF, U and HID are not needed and can be set to NULL. If Time Permits are enabled, and PIN error detection is ON, U, UT, HID and HTID are all required. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">h</td><td>is the hash type </td></tr>
<tr><td class="paramname">d</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled </td></tr>
<tr><td class="paramname">HID</td><td>is output H(ID), a hash of the client ID </td></tr>
<tr><td class="paramname">HTID</td><td>is output H(ID)+H(d|H(ID)) </td></tr>
<tr><td class="paramname">y</td><td>is output H(t|U) or H(t|UT) if Time Permits enabled </td></tr>
<tr><td class="paramname">SS</td><td>is the input server secret </td></tr>
<tr><td class="paramname">U</td><td>is input from the client = x.H(ID) </td></tr>
<tr><td class="paramname">UT</td><td>is input from the client= x.(H(ID)+H(d|H(ID))) </td></tr>
<tr><td class="paramname">V</td><td>is an input from the client </td></tr>
<tr><td class="paramname">E</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required </td></tr>
<tr><td class="paramname">F</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required </td></tr>
<tr><td class="paramname">ID</td><td>is the input claimed client identity </td></tr>
<tr><td class="paramname">MESSAGE</td><td>is the message to be signed </td></tr>
<tr><td class="paramname">t</td><td>is input epoch time in seconds - a timestamp </td></tr>
<tr><td class="paramname">Pa</td><td>is input from the client z.Q or NULL if the key-escrow less scheme is not used </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="a76c09183b4aecfd7889dc82727f74b9a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a76c09183b4aecfd7889dc82727f74b9a">&#9670;&nbsp;</a></span>MPIN_FP256BN_SERVER_1()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void MPIN_FP256BN_SERVER_1 </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>d</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>ID</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>HID</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>HTID</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">h</td><td>is the hash type </td></tr>
<tr><td class="paramname">d</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled </td></tr>
<tr><td class="paramname">ID</td><td>is the input claimed client identity </td></tr>
<tr><td class="paramname">HID</td><td>is output H(ID), a hash of the client ID </td></tr>
<tr><td class="paramname">HTID</td><td>is output H(ID)+H(d|H(ID)) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="ab081821ee77dbe64e5c5af1283aef0a8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab081821ee77dbe64e5c5af1283aef0a8">&#9670;&nbsp;</a></span>MPIN_FP256BN_SERVER_2()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_SERVER_2 </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>d</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>HID</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>HTID</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>SS</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>U</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>UT</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>V</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>E</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>F</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>Pa</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>If Time Permits are disabled, set d = 0, and UT and HTID are not needed and can be set to NULL. If Time Permits are enabled, and PIN error detection is OFF, U and HID are not needed and can be set to NULL. If Time Permits are enabled, and PIN error detection is ON, U, UT, HID and HTID are all required. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">d</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled </td></tr>
<tr><td class="paramname">HID</td><td>is input H(ID), a hash of the client ID </td></tr>
<tr><td class="paramname">HTID</td><td>is input H(ID)+H(d|H(ID)) </td></tr>
<tr><td class="paramname">y</td><td>is the input server's randomly generated challenge </td></tr>
<tr><td class="paramname">SS</td><td>is the input server secret </td></tr>
<tr><td class="paramname">U</td><td>is input from the client = x.H(ID) </td></tr>
<tr><td class="paramname">UT</td><td>is input from the client= x.(H(ID)+H(d|H(ID))) </td></tr>
<tr><td class="paramname">V</td><td>is an input from the client </td></tr>
<tr><td class="paramname">E</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required </td></tr>
<tr><td class="paramname">F</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required </td></tr>
<tr><td class="paramname">Pa</td><td>is the input public key from the client, z.Q or NULL if the client uses regular mpin </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
<a id="a92431ef2840b73fcc88e5b0930b342b9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a92431ef2840b73fcc88e5b0930b342b9">&#9670;&nbsp;</a></span>MPIN_FP256BN_SERVER_KEY()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int MPIN_FP256BN_SERVER_KEY </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>Z</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>SS</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>w</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>I</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>U</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>UT</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structoctet.html">octet</a> *&#160;</td>
<td class="paramname"><em>K</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Uses UT internally for the key calculation, unless not available in which case U is used </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">h</td><td>is the hash type </td></tr>
<tr><td class="paramname">Z</td><td>is the input Client-side Diffie-Hellman component </td></tr>
<tr><td class="paramname">SS</td><td>is the input server secret </td></tr>
<tr><td class="paramname">w</td><td>is an input random number generated by the server </td></tr>
<tr><td class="paramname">p</td><td>is an input, hash of the protocol transcript </td></tr>
<tr><td class="paramname">I</td><td>is the hashed input client ID = H(ID) </td></tr>
<tr><td class="paramname">U</td><td>is input from the client = x.H(ID) </td></tr>
<tr><td class="paramname">UT</td><td>is input from the client= x.(H(ID)+H(d|H(ID))) </td></tr>
<tr><td class="paramname">K</td><td>is the output calculated shared key </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 or an error code </dd></dl>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.15
</small></address>
</body>
</html>