mirror of
https://github.com/seigler/dash-docs
synced 2025-07-27 17:56:16 +00:00
165 lines
60 KiB
HTML
165 lines
60 KiB
HTML
<!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.14"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>Dash Core: src/secp256k1/src/ecmult_gen_impl.h Source File</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="navtree.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="resize.js"></script>
|
|
<script type="text/javascript" src="navtreedata.js"></script>
|
|
<script type="text/javascript" src="navtree.js"></script>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
$(document).ready(initResizable);
|
|
/* @license-end */</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="projectlogo"><img alt="Logo" src="bitcoin_logo_doxygen.png"/></td>
|
|
<td id="projectalign" style="padding-left: 0.5em;">
|
|
<div id="projectname">Dash Core
|
|
 <span id="projectnumber">0.12.2.1</span>
|
|
</div>
|
|
<div id="projectbrief">P2P Digital Currency</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.8.14 -->
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&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&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>
|
|
</div><!-- top -->
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
<div id="nav-tree">
|
|
<div id="nav-tree-contents">
|
|
<div id="nav-sync" class="sync"></div>
|
|
</div>
|
|
</div>
|
|
<div id="splitbar" style="-moz-user-select:none;"
|
|
class="ui-resizable-handle">
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
$(document).ready(function(){initNavTree('ecmult__gen__impl_8h_source.html','');});
|
|
/* @license-end */
|
|
</script>
|
|
<div id="doc-content">
|
|
<!-- 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 class="header">
|
|
<div class="headertitle">
|
|
<div class="title">ecmult_gen_impl.h</div> </div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<a href="ecmult__gen__impl_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2013, 2014, 2015 Pieter Wuille, Gregory Maxwell *</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Distributed under the MIT software license, see the accompanying *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * file COPYING or http://www.opensource.org/licenses/mit-license.php.*</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> **********************************************************************/</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#ifndef _SECP256K1_ECMULT_GEN_IMPL_H_</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#define _SECP256K1_ECMULT_GEN_IMPL_H_</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> </div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include "<a class="code" href="scalar_8h.html">scalar.h</a>"</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include "<a class="code" href="group_8h.html">group.h</a>"</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include "<a class="code" href="ecmult__gen_8h.html">ecmult_gen.h</a>"</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include "<a class="code" href="hash__impl_8h.html">hash_impl.h</a>"</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#ifdef USE_ECMULT_STATIC_PRECOMPUTATION</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include "<a class="code" href="ecmult__static__context_8h.html">ecmult_static_context.h</a>"</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00017"></a><span class="lineno"><a class="line" href="ecmult__gen__impl_8h.html#a85f9fd11a4166d3d482309317d65c276"> 17</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="ecmult__gen__impl_8h.html#a85f9fd11a4166d3d482309317d65c276">secp256k1_ecmult_gen_context_init</a>(<a class="code" href="structsecp256k1__ecmult__gen__context.html">secp256k1_ecmult_gen_context</a> *<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>) {</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->prec = NULL;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> }</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div><div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="ecmult__gen__impl_8h.html#afaf90b2a6554053187cdc89df0dafd21"> 21</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="ecmult__gen__impl_8h.html#afaf90b2a6554053187cdc89df0dafd21">secp256k1_ecmult_gen_context_build</a>(<a class="code" href="structsecp256k1__ecmult__gen__context.html">secp256k1_ecmult_gen_context</a> *<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>, <span class="keyword">const</span> <a class="code" href="structsecp256k1__callback.html">secp256k1_callback</a>* cb) {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#ifndef USE_ECMULT_STATIC_PRECOMPUTATION</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <a class="code" href="structsecp256k1__ge.html">secp256k1_ge</a> prec[1024];</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <a class="code" href="structsecp256k1__gej.html">secp256k1_gej</a> gj;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <a class="code" href="structsecp256k1__gej.html">secp256k1_gej</a> nums_gej;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keywordtype">int</span> i, j;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">if</span> (<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->prec != NULL) {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  }</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#ifndef USE_ECMULT_STATIC_PRECOMPUTATION</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->prec = (<a class="code" href="structsecp256k1__ge__storage.html">secp256k1_ge_storage</a> (*)[64][16])<a class="code" href="secp256k1_2src_2util_8h.html#a20790114658c559e5048a38694708c3e">checked_malloc</a>(cb, <span class="keyword">sizeof</span>(*<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->prec));</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="comment">/* get the generator */</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <a class="code" href="group_8h.html#ad5f813e26afb239f03e83f0e61e05498">secp256k1_gej_set_ge</a>(&gj, &<a class="code" href="group__impl_8h.html#ac2075a99877abe469ea60a119fe68e6c">secp256k1_ge_const_g</a>);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="comment">/* Construct a group element with no known corresponding scalar (nothing up my sleeve). */</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> nums_b32[33] = <span class="stringliteral">"The scalar for this x is unknown"</span>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <a class="code" href="structsecp256k1__fe.html">secp256k1_fe</a> nums_x;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <a class="code" href="structsecp256k1__ge.html">secp256k1_ge</a> nums_ge;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordtype">int</span> r;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  r = <a class="code" href="field_8h.html#a5c86a65052e3b135919c00fe2233a43d">secp256k1_fe_set_b32</a>(&nums_x, nums_b32);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  (void)r;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <a class="code" href="secp256k1_2src_2util_8h.html#aca8ac5ae73fd966db106de59160a178b">VERIFY_CHECK</a>(r);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  r = <a class="code" href="group_8h.html#a3c3d9154b093bb4ed48ba55e4c28a0b5">secp256k1_ge_set_xo_var</a>(&nums_ge, &nums_x, 0);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  (void)r;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <a class="code" href="secp256k1_2src_2util_8h.html#aca8ac5ae73fd966db106de59160a178b">VERIFY_CHECK</a>(r);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <a class="code" href="group_8h.html#ad5f813e26afb239f03e83f0e61e05498">secp256k1_gej_set_ge</a>(&nums_gej, &nums_ge);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="comment">/* Add G to make the bits in x uniformly distributed. */</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <a class="code" href="group_8h.html#a4d0338f50b08d082caa32f8e72707b55">secp256k1_gej_add_ge_var</a>(&nums_gej, &nums_gej, &<a class="code" href="group__impl_8h.html#ac2075a99877abe469ea60a119fe68e6c">secp256k1_ge_const_g</a>, NULL);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="comment">/* compute prec. */</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <a class="code" href="structsecp256k1__gej.html">secp256k1_gej</a> precj[1024]; <span class="comment">/* Jacobian versions of prec. */</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <a class="code" href="structsecp256k1__gej.html">secp256k1_gej</a> gbase;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <a class="code" href="structsecp256k1__gej.html">secp256k1_gej</a> numsbase;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  gbase = gj; <span class="comment">/* 16^j * G */</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  numsbase = nums_gej; <span class="comment">/* 2^j * nums. */</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">for</span> (j = 0; j < 64; j++) {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="comment">/* Set precj[j*16 .. j*16+15] to (numsbase, numsbase + gbase, ..., numsbase + 15*gbase). */</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  precj[j*16] = numsbase;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">for</span> (i = 1; i < 16; i++) {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="group_8h.html#a8df21f3ef7412e6c4d39fb67dc0140c6">secp256k1_gej_add_var</a>(&precj[j*16 + i], &precj[j*16 + i - 1], &gbase, NULL);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">/* Multiply gbase by 16. */</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">for</span> (i = 0; i < 4; i++) {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <a class="code" href="group_8h.html#a033aa434a4d0838f649ad757dd44db46">secp256k1_gej_double_var</a>(&gbase, &gbase, NULL);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="comment">/* Multiply numbase by 2. */</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <a class="code" href="group_8h.html#a033aa434a4d0838f649ad757dd44db46">secp256k1_gej_double_var</a>(&numsbase, &numsbase, NULL);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">if</span> (j == 62) {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="comment">/* In the last iteration, numsbase is (1 - 2^j) * nums instead. */</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <a class="code" href="group_8h.html#af9194949a7aaf18aceab1dee73fe4027">secp256k1_gej_neg</a>(&numsbase, &numsbase);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <a class="code" href="group_8h.html#a8df21f3ef7412e6c4d39fb67dc0140c6">secp256k1_gej_add_var</a>(&numsbase, &numsbase, &nums_gej, NULL);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <a class="code" href="group_8h.html#ada58b0cf328a74cfdd1f8b35083668a1">secp256k1_ge_set_all_gej_var</a>(1024, prec, precj, cb);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">for</span> (j = 0; j < 64; j++) {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">for</span> (i = 0; i < 16; i++) {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <a class="code" href="group_8h.html#ad6499ae629f998e50d8614869ee3c67f">secp256k1_ge_to_storage</a>(&(*<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->prec)[j][i], &prec[j*16 + i]);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  (void)cb;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->prec = (<a class="code" href="structsecp256k1__ge__storage.html">secp256k1_ge_storage</a> (*)[64][16])<a class="code" href="ecmult__static__context_8h.html#a8a5c6caf185ac8ce552d2059f647807e">secp256k1_ecmult_static_context</a>;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <a class="code" href="ecmult__gen__impl_8h.html#a7e41f045cb4901a4eba781966fa35abd">secp256k1_ecmult_gen_blind</a>(<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>, NULL);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="ecmult__gen__impl_8h.html#a9a40662d6ed2cbab43dbddc25f570f97"> 94</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="ecmult__gen__impl_8h.html#a9a40662d6ed2cbab43dbddc25f570f97">secp256k1_ecmult_gen_context_is_built</a>(<span class="keyword">const</span> <a class="code" href="structsecp256k1__ecmult__gen__context.html">secp256k1_ecmult_gen_context</a>* <a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>) {</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">return</span> <a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->prec != NULL;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="ecmult__gen__impl_8h.html#aab03a4f94d775718656aabc6b14cfbee"> 98</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="ecmult__gen__impl_8h.html#aab03a4f94d775718656aabc6b14cfbee">secp256k1_ecmult_gen_context_clone</a>(<a class="code" href="structsecp256k1__ecmult__gen__context.html">secp256k1_ecmult_gen_context</a> *dst,</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keyword">const</span> <a class="code" href="structsecp256k1__ecmult__gen__context.html">secp256k1_ecmult_gen_context</a> *src, <span class="keyword">const</span> <a class="code" href="structsecp256k1__callback.html">secp256k1_callback</a>* cb) {</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">if</span> (src-><a class="code" href="structsecp256k1__ecmult__gen__context.html#ad1ebc8daeace10a8d646f89bbdf32882">prec</a> == NULL) {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  dst-><a class="code" href="structsecp256k1__ecmult__gen__context.html#ad1ebc8daeace10a8d646f89bbdf32882">prec</a> = NULL;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor">#ifndef USE_ECMULT_STATIC_PRECOMPUTATION</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  dst-><a class="code" href="structsecp256k1__ecmult__gen__context.html#ad1ebc8daeace10a8d646f89bbdf32882">prec</a> = (<a class="code" href="structsecp256k1__ge__storage.html">secp256k1_ge_storage</a> (*)[64][16])<a class="code" href="secp256k1_2src_2util_8h.html#a20790114658c559e5048a38694708c3e">checked_malloc</a>(cb, <span class="keyword">sizeof</span>(*dst-><a class="code" href="structsecp256k1__ecmult__gen__context.html#ad1ebc8daeace10a8d646f89bbdf32882">prec</a>));</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="glibc__compat_8cpp.html#a0f46826ab0466591e136db24394923cf">memcpy</a>(dst-><a class="code" href="structsecp256k1__ecmult__gen__context.html#ad1ebc8daeace10a8d646f89bbdf32882">prec</a>, src-><a class="code" href="structsecp256k1__ecmult__gen__context.html#ad1ebc8daeace10a8d646f89bbdf32882">prec</a>, <span class="keyword">sizeof</span>(*dst-><a class="code" href="structsecp256k1__ecmult__gen__context.html#ad1ebc8daeace10a8d646f89bbdf32882">prec</a>));</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  (void)cb;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  dst-><a class="code" href="structsecp256k1__ecmult__gen__context.html#ad1ebc8daeace10a8d646f89bbdf32882">prec</a> = src-><a class="code" href="structsecp256k1__ecmult__gen__context.html#ad1ebc8daeace10a8d646f89bbdf32882">prec</a>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  dst-><a class="code" href="structsecp256k1__ecmult__gen__context.html#a1ebfe4de83e25248ea9d989d06c9b069">initial</a> = src-><a class="code" href="structsecp256k1__ecmult__gen__context.html#a1ebfe4de83e25248ea9d989d06c9b069">initial</a>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  dst-><a class="code" href="structsecp256k1__ecmult__gen__context.html#af2f3064a367e86f936ab1c8b93d6f27e">blind</a> = src-><a class="code" href="structsecp256k1__ecmult__gen__context.html#af2f3064a367e86f936ab1c8b93d6f27e">blind</a>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="ecmult__gen__impl_8h.html#a2832f924fc8c5c9d0540d808ccdd7072"> 115</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="ecmult__gen__impl_8h.html#a2832f924fc8c5c9d0540d808ccdd7072">secp256k1_ecmult_gen_context_clear</a>(<a class="code" href="structsecp256k1__ecmult__gen__context.html">secp256k1_ecmult_gen_context</a> *<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>) {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="preprocessor">#ifndef USE_ECMULT_STATIC_PRECOMPUTATION</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  free(<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->prec);</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <a class="code" href="scalar_8h.html#ad8fb9bc2a828903963bf37806d8edd11">secp256k1_scalar_clear</a>(&<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->blind);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="group_8h.html#a2454dfbe1e75eba118d2c0a4184a9acc">secp256k1_gej_clear</a>(&<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->initial);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->prec = NULL;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> }</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="ecmult__gen__impl_8h.html#a3d28ad125fc1206272b0ecbdfdf7a8f4"> 124</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="ecmult__gen__impl_8h.html#a3d28ad125fc1206272b0ecbdfdf7a8f4">secp256k1_ecmult_gen</a>(<span class="keyword">const</span> <a class="code" href="structsecp256k1__ecmult__gen__context.html">secp256k1_ecmult_gen_context</a> *<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>, <a class="code" href="structsecp256k1__gej.html">secp256k1_gej</a> *r, <span class="keyword">const</span> <a class="code" href="structsecp256k1__scalar.html">secp256k1_scalar</a> *gn) {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="structsecp256k1__ge.html">secp256k1_ge</a> add;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <a class="code" href="structsecp256k1__ge__storage.html">secp256k1_ge_storage</a> adds;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <a class="code" href="structsecp256k1__scalar.html">secp256k1_scalar</a> gnb;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordtype">int</span> bits;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordtype">int</span> i, j;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  memset(&adds, 0, <span class="keyword">sizeof</span>(adds));</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  *r = <a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->initial;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="comment">/* Blind scalar/point multiplication by computing (n-b)G + bG instead of nG. */</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <a class="code" href="scalar_8h.html#a83257652850276cd74c7cdd1f9444d9c">secp256k1_scalar_add</a>(&gnb, gn, &<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->blind);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  add.<a class="code" href="structsecp256k1__ge.html#a1cdb35fe7abf6f17c08e4375eeb26628">infinity</a> = 0;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">for</span> (j = 0; j < 64; j++) {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  bits = <a class="code" href="scalar_8h.html#a70d7af05e9c9a579ed5cb20d9f22eeba">secp256k1_scalar_get_bits</a>(&gnb, j * 4, 4);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">for</span> (i = 0; i < 16; i++) {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <a class="code" href="group_8h.html#a9a5ec01f9c5a8fcbae1a83217cd96069">secp256k1_ge_storage_cmov</a>(&adds, &(*<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->prec)[j][i], i == bits);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <a class="code" href="group_8h.html#a8c1e7f328284d9ba56404bb8d99bf765">secp256k1_ge_from_storage</a>(&add, &adds);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <a class="code" href="group_8h.html#a586b55d5921edcd68799f584c0a3c58d">secp256k1_gej_add_ge</a>(r, r, &add);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  bits = 0;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <a class="code" href="group_8h.html#a34793cf48794f089bb28597d1a9f23b2">secp256k1_ge_clear</a>(&add);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <a class="code" href="scalar_8h.html#ad8fb9bc2a828903963bf37806d8edd11">secp256k1_scalar_clear</a>(&gnb);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment">/* Setup blinding values for secp256k1_ecmult_gen. */</span></div><div class="line"><a name="l00159"></a><span class="lineno"><a class="line" href="ecmult__gen__impl_8h.html#a7e41f045cb4901a4eba781966fa35abd"> 159</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="ecmult__gen__impl_8h.html#a7e41f045cb4901a4eba781966fa35abd">secp256k1_ecmult_gen_blind</a>(<a class="code" href="structsecp256k1__ecmult__gen__context.html">secp256k1_ecmult_gen_context</a> *<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *seed32) {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <a class="code" href="structsecp256k1__scalar.html">secp256k1_scalar</a> b;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <a class="code" href="structsecp256k1__gej.html">secp256k1_gej</a> gb;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <a class="code" href="structsecp256k1__fe.html">secp256k1_fe</a> s;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> nonce32[32];</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <a class="code" href="structsecp256k1__rfc6979__hmac__sha256__t.html">secp256k1_rfc6979_hmac_sha256_t</a> rng;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordtype">int</span> retry;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> keydata[64] = {0};</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">if</span> (seed32 == NULL) {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="comment">/* When seed is NULL, reset the initial point and blinding value. */</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <a class="code" href="group_8h.html#ad5f813e26afb239f03e83f0e61e05498">secp256k1_gej_set_ge</a>(&<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->initial, &<a class="code" href="group__impl_8h.html#ac2075a99877abe469ea60a119fe68e6c">secp256k1_ge_const_g</a>);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <a class="code" href="group_8h.html#af9194949a7aaf18aceab1dee73fe4027">secp256k1_gej_neg</a>(&<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->initial, &<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->initial);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <a class="code" href="scalar_8h.html#a41cb11650e4dea0fe7ac5b59b9fce9dc">secp256k1_scalar_set_int</a>(&<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->blind, 1);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="comment">/* The prior blinding value (if not reset) is chained forward by including it in the hash. */</span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <a class="code" href="scalar_8h.html#a4fa08f8af5a23f505b44c9ef1bec1831">secp256k1_scalar_get_b32</a>(nonce32, &<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->blind);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <a class="code" href="glibc__compat_8cpp.html#a0f46826ab0466591e136db24394923cf">memcpy</a>(keydata, nonce32, 32);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">if</span> (seed32 != NULL) {</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <a class="code" href="glibc__compat_8cpp.html#a0f46826ab0466591e136db24394923cf">memcpy</a>(keydata + 32, seed32, 32);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <a class="code" href="secp256k1_2src_2hash_8h.html#a9dd561651b3373fe94e80295dfdd43a7">secp256k1_rfc6979_hmac_sha256_initialize</a>(&rng, keydata, seed32 ? 64 : 32);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  memset(keydata, 0, <span class="keyword">sizeof</span>(keydata));</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="comment">/* Retry for out of range results to achieve uniformity. */</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">do</span> {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <a class="code" href="secp256k1_2src_2hash_8h.html#a993c3261472ef00e4738e0fe7a99b7cb">secp256k1_rfc6979_hmac_sha256_generate</a>(&rng, nonce32, 32);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  retry = !<a class="code" href="field_8h.html#a5c86a65052e3b135919c00fe2233a43d">secp256k1_fe_set_b32</a>(&s, nonce32);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  retry |= <a class="code" href="field_8h.html#a619ec4805df6cc54d70e6682ceebd098">secp256k1_fe_is_zero</a>(&s);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  } <span class="keywordflow">while</span> (retry); <span class="comment">/* This branch true is cryptographically unreachable. Requires sha256_hmac output > Fp. */</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="comment">/* Randomize the projection to defend against multiplier sidechannels. */</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <a class="code" href="group_8h.html#a96ba360f6eb5f21c88e019e741a098ee">secp256k1_gej_rescale</a>(&<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->initial, &s);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <a class="code" href="field__10x26__impl_8h.html#aa213f05a02544f894a8829f672b6e4ea">secp256k1_fe_clear</a>(&s);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">do</span> {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <a class="code" href="secp256k1_2src_2hash_8h.html#a993c3261472ef00e4738e0fe7a99b7cb">secp256k1_rfc6979_hmac_sha256_generate</a>(&rng, nonce32, 32);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <a class="code" href="scalar_8h.html#a25cc2d45ae1d1765d07c3313cdf46fa0">secp256k1_scalar_set_b32</a>(&b, nonce32, &retry);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="comment">/* A blinding value of 0 works, but would undermine the projection hardening. */</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  retry |= <a class="code" href="scalar_8h.html#a3f0ac84fe49a1c1f51212582a2c149d4">secp256k1_scalar_is_zero</a>(&b);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  } <span class="keywordflow">while</span> (retry); <span class="comment">/* This branch true is cryptographically unreachable. Requires sha256_hmac output > order. */</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <a class="code" href="secp256k1_2src_2hash_8h.html#a27832ea2666bbf9e5c7a18559660e9da">secp256k1_rfc6979_hmac_sha256_finalize</a>(&rng);</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  memset(nonce32, 0, 32);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <a class="code" href="ecmult__gen__impl_8h.html#a3d28ad125fc1206272b0ecbdfdf7a8f4">secp256k1_ecmult_gen</a>(<a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>, &gb, &b);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <a class="code" href="scalar_8h.html#aa3f1c1d4536adf835ee256878c222968">secp256k1_scalar_negate</a>(&b, &b);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->blind = b;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <a class="code" href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a>->initial = gb;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <a class="code" href="scalar_8h.html#ad8fb9bc2a828903963bf37806d8edd11">secp256k1_scalar_clear</a>(&b);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <a class="code" href="group_8h.html#a2454dfbe1e75eba118d2c0a4184a9acc">secp256k1_gej_clear</a>(&gb);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> }</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="preprocessor">#endif</span></div><div class="ttc" id="secp256k1_2src_2util_8h_html_aca8ac5ae73fd966db106de59160a178b"><div class="ttname"><a href="secp256k1_2src_2util_8h.html#aca8ac5ae73fd966db106de59160a178b">VERIFY_CHECK</a></div><div class="ttdeci">#define VERIFY_CHECK(cond)</div><div class="ttdef"><b>Definition:</b> <a href="secp256k1_2src_2util_8h_source.html#l00064">util.h:64</a></div></div>
|
|
<div class="ttc" id="structsecp256k1__fe_html"><div class="ttname"><a href="structsecp256k1__fe.html">secp256k1_fe</a></div><div class="ttdef"><b>Definition:</b> <a href="field__10x26_8h_source.html#l00012">field_10x26.h:12</a></div></div>
|
|
<div class="ttc" id="field__10x26__impl_8h_html_aa213f05a02544f894a8829f672b6e4ea"><div class="ttname"><a href="field__10x26__impl_8h.html#aa213f05a02544f894a8829f672b6e4ea">secp256k1_fe_clear</a></div><div class="ttdeci">static SECP256K1_INLINE void secp256k1_fe_clear(secp256k1_fe *a)</div><div class="ttdef"><b>Definition:</b> <a href="field__10x26__impl_8h_source.html#l00299">field_10x26_impl.h:299</a></div></div>
|
|
<div class="ttc" id="group_8h_html_a8df21f3ef7412e6c4d39fb67dc0140c6"><div class="ttname"><a href="group_8h.html#a8df21f3ef7412e6c4d39fb67dc0140c6">secp256k1_gej_add_var</a></div><div class="ttdeci">static void secp256k1_gej_add_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_gej *b, secp256k1_fe *rzr)</div></div>
|
|
<div class="ttc" id="field_8h_html_a619ec4805df6cc54d70e6682ceebd098"><div class="ttname"><a href="field_8h.html#a619ec4805df6cc54d70e6682ceebd098">secp256k1_fe_is_zero</a></div><div class="ttdeci">static int secp256k1_fe_is_zero(const secp256k1_fe *a)</div></div>
|
|
<div class="ttc" id="hash__impl_8h_html"><div class="ttname"><a href="hash__impl_8h.html">hash_impl.h</a></div></div>
|
|
<div class="ttc" id="secp256k1_2src_2hash_8h_html_a9dd561651b3373fe94e80295dfdd43a7"><div class="ttname"><a href="secp256k1_2src_2hash_8h.html#a9dd561651b3373fe94e80295dfdd43a7">secp256k1_rfc6979_hmac_sha256_initialize</a></div><div class="ttdeci">static void secp256k1_rfc6979_hmac_sha256_initialize(secp256k1_rfc6979_hmac_sha256_t *rng, const unsigned char *key, size_t keylen)</div></div>
|
|
<div class="ttc" id="group_8h_html"><div class="ttname"><a href="group_8h.html">group.h</a></div></div>
|
|
<div class="ttc" id="ecmult__gen__impl_8h_html_aab03a4f94d775718656aabc6b14cfbee"><div class="ttname"><a href="ecmult__gen__impl_8h.html#aab03a4f94d775718656aabc6b14cfbee">secp256k1_ecmult_gen_context_clone</a></div><div class="ttdeci">static void secp256k1_ecmult_gen_context_clone(secp256k1_ecmult_gen_context *dst, const secp256k1_ecmult_gen_context *src, const secp256k1_callback *cb)</div><div class="ttdef"><b>Definition:</b> <a href="ecmult__gen__impl_8h_source.html#l00098">ecmult_gen_impl.h:98</a></div></div>
|
|
<div class="ttc" id="scalar_8h_html_a70d7af05e9c9a579ed5cb20d9f22eeba"><div class="ttname"><a href="scalar_8h.html#a70d7af05e9c9a579ed5cb20d9f22eeba">secp256k1_scalar_get_bits</a></div><div class="ttdeci">static unsigned int secp256k1_scalar_get_bits(const secp256k1_scalar *a, unsigned int offset, unsigned int count)</div></div>
|
|
<div class="ttc" id="scalar_8h_html_aa3f1c1d4536adf835ee256878c222968"><div class="ttname"><a href="scalar_8h.html#aa3f1c1d4536adf835ee256878c222968">secp256k1_scalar_negate</a></div><div class="ttdeci">static void secp256k1_scalar_negate(secp256k1_scalar *r, const secp256k1_scalar *a)</div></div>
|
|
<div class="ttc" id="scalar_8h_html_a3f0ac84fe49a1c1f51212582a2c149d4"><div class="ttname"><a href="scalar_8h.html#a3f0ac84fe49a1c1f51212582a2c149d4">secp256k1_scalar_is_zero</a></div><div class="ttdeci">static int secp256k1_scalar_is_zero(const secp256k1_scalar *a)</div></div>
|
|
<div class="ttc" id="group_8h_html_af9194949a7aaf18aceab1dee73fe4027"><div class="ttname"><a href="group_8h.html#af9194949a7aaf18aceab1dee73fe4027">secp256k1_gej_neg</a></div><div class="ttdeci">static void secp256k1_gej_neg(secp256k1_gej *r, const secp256k1_gej *a)</div></div>
|
|
<div class="ttc" id="structsecp256k1__rfc6979__hmac__sha256__t_html"><div class="ttname"><a href="structsecp256k1__rfc6979__hmac__sha256__t.html">secp256k1_rfc6979_hmac_sha256_t</a></div><div class="ttdef"><b>Definition:</b> <a href="secp256k1_2src_2hash_8h_source.html#l00031">hash.h:31</a></div></div>
|
|
<div class="ttc" id="secp256k1_2src_2hash_8h_html_a993c3261472ef00e4738e0fe7a99b7cb"><div class="ttname"><a href="secp256k1_2src_2hash_8h.html#a993c3261472ef00e4738e0fe7a99b7cb">secp256k1_rfc6979_hmac_sha256_generate</a></div><div class="ttdeci">static void secp256k1_rfc6979_hmac_sha256_generate(secp256k1_rfc6979_hmac_sha256_t *rng, unsigned char *out, size_t outlen)</div></div>
|
|
<div class="ttc" id="scalar_8h_html_a25cc2d45ae1d1765d07c3313cdf46fa0"><div class="ttname"><a href="scalar_8h.html#a25cc2d45ae1d1765d07c3313cdf46fa0">secp256k1_scalar_set_b32</a></div><div class="ttdeci">static void secp256k1_scalar_set_b32(secp256k1_scalar *r, const unsigned char *bin, int *overflow)</div></div>
|
|
<div class="ttc" id="structsecp256k1__gej_html"><div class="ttname"><a href="structsecp256k1__gej.html">secp256k1_gej</a></div><div class="ttdef"><b>Definition:</b> <a href="group_8h_source.html#l00024">group.h:24</a></div></div>
|
|
<div class="ttc" id="group_8h_html_a4d0338f50b08d082caa32f8e72707b55"><div class="ttname"><a href="group_8h.html#a4d0338f50b08d082caa32f8e72707b55">secp256k1_gej_add_ge_var</a></div><div class="ttdeci">static void secp256k1_gej_add_ge_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, secp256k1_fe *rzr)</div></div>
|
|
<div class="ttc" id="group_8h_html_a033aa434a4d0838f649ad757dd44db46"><div class="ttname"><a href="group_8h.html#a033aa434a4d0838f649ad757dd44db46">secp256k1_gej_double_var</a></div><div class="ttdeci">static void secp256k1_gej_double_var(secp256k1_gej *r, const secp256k1_gej *a, secp256k1_fe *rzr)</div></div>
|
|
<div class="ttc" id="group__impl_8h_html_ac2075a99877abe469ea60a119fe68e6c"><div class="ttname"><a href="group__impl_8h.html#ac2075a99877abe469ea60a119fe68e6c">secp256k1_ge_const_g</a></div><div class="ttdeci">static const secp256k1_ge secp256k1_ge_const_g</div><div class="ttdef"><b>Definition:</b> <a href="group__impl_8h_source.html#l00019">group_impl.h:19</a></div></div>
|
|
<div class="ttc" id="ecmult__gen__impl_8h_html_a3d28ad125fc1206272b0ecbdfdf7a8f4"><div class="ttname"><a href="ecmult__gen__impl_8h.html#a3d28ad125fc1206272b0ecbdfdf7a8f4">secp256k1_ecmult_gen</a></div><div class="ttdeci">static void secp256k1_ecmult_gen(const secp256k1_ecmult_gen_context *ctx, secp256k1_gej *r, const secp256k1_scalar *gn)</div><div class="ttdef"><b>Definition:</b> <a href="ecmult__gen__impl_8h_source.html#l00124">ecmult_gen_impl.h:124</a></div></div>
|
|
<div class="ttc" id="secp256k1_2src_2hash_8h_html_a27832ea2666bbf9e5c7a18559660e9da"><div class="ttname"><a href="secp256k1_2src_2hash_8h.html#a27832ea2666bbf9e5c7a18559660e9da">secp256k1_rfc6979_hmac_sha256_finalize</a></div><div class="ttdeci">static void secp256k1_rfc6979_hmac_sha256_finalize(secp256k1_rfc6979_hmac_sha256_t *rng)</div></div>
|
|
<div class="ttc" id="ecmult__gen__impl_8h_html_a85f9fd11a4166d3d482309317d65c276"><div class="ttname"><a href="ecmult__gen__impl_8h.html#a85f9fd11a4166d3d482309317d65c276">secp256k1_ecmult_gen_context_init</a></div><div class="ttdeci">static void secp256k1_ecmult_gen_context_init(secp256k1_ecmult_gen_context *ctx)</div><div class="ttdef"><b>Definition:</b> <a href="ecmult__gen__impl_8h_source.html#l00017">ecmult_gen_impl.h:17</a></div></div>
|
|
<div class="ttc" id="structsecp256k1__ge__storage_html"><div class="ttname"><a href="structsecp256k1__ge__storage.html">secp256k1_ge_storage</a></div><div class="ttdef"><b>Definition:</b> <a href="group_8h_source.html#l00034">group.h:34</a></div></div>
|
|
<div class="ttc" id="structsecp256k1__ecmult__gen__context_html_af2f3064a367e86f936ab1c8b93d6f27e"><div class="ttname"><a href="structsecp256k1__ecmult__gen__context.html#af2f3064a367e86f936ab1c8b93d6f27e">secp256k1_ecmult_gen_context::blind</a></div><div class="ttdeci">secp256k1_scalar blind</div><div class="ttdef"><b>Definition:</b> <a href="ecmult__gen_8h_source.html#l00027">ecmult_gen.h:27</a></div></div>
|
|
<div class="ttc" id="tests_8c_html_a06a3e29ada83211a695a49e8f7405842"><div class="ttname"><a href="tests_8c.html#a06a3e29ada83211a695a49e8f7405842">ctx</a></div><div class="ttdeci">static secp256k1_context * ctx</div><div class="ttdef"><b>Definition:</b> <a href="tests_8c_source.html#l00042">tests.c:42</a></div></div>
|
|
<div class="ttc" id="group_8h_html_a2454dfbe1e75eba118d2c0a4184a9acc"><div class="ttname"><a href="group_8h.html#a2454dfbe1e75eba118d2c0a4184a9acc">secp256k1_gej_clear</a></div><div class="ttdeci">static void secp256k1_gej_clear(secp256k1_gej *r)</div></div>
|
|
<div class="ttc" id="ecmult__gen_8h_html"><div class="ttname"><a href="ecmult__gen_8h.html">ecmult_gen.h</a></div></div>
|
|
<div class="ttc" id="scalar_8h_html"><div class="ttname"><a href="scalar_8h.html">scalar.h</a></div></div>
|
|
<div class="ttc" id="scalar_8h_html_ad8fb9bc2a828903963bf37806d8edd11"><div class="ttname"><a href="scalar_8h.html#ad8fb9bc2a828903963bf37806d8edd11">secp256k1_scalar_clear</a></div><div class="ttdeci">static void secp256k1_scalar_clear(secp256k1_scalar *r)</div></div>
|
|
<div class="ttc" id="structsecp256k1__ge_html"><div class="ttname"><a href="structsecp256k1__ge.html">secp256k1_ge</a></div><div class="ttdef"><b>Definition:</b> <a href="group_8h_source.html#l00014">group.h:14</a></div></div>
|
|
<div class="ttc" id="group_8h_html_a34793cf48794f089bb28597d1a9f23b2"><div class="ttname"><a href="group_8h.html#a34793cf48794f089bb28597d1a9f23b2">secp256k1_ge_clear</a></div><div class="ttdeci">static void secp256k1_ge_clear(secp256k1_ge *r)</div></div>
|
|
<div class="ttc" id="group_8h_html_a9a5ec01f9c5a8fcbae1a83217cd96069"><div class="ttname"><a href="group_8h.html#a9a5ec01f9c5a8fcbae1a83217cd96069">secp256k1_ge_storage_cmov</a></div><div class="ttdeci">static void secp256k1_ge_storage_cmov(secp256k1_ge_storage *r, const secp256k1_ge_storage *a, int flag)</div></div>
|
|
<div class="ttc" id="structsecp256k1__ecmult__gen__context_html"><div class="ttname"><a href="structsecp256k1__ecmult__gen__context.html">secp256k1_ecmult_gen_context</a></div><div class="ttdef"><b>Definition:</b> <a href="ecmult__gen_8h_source.html#l00013">ecmult_gen.h:13</a></div></div>
|
|
<div class="ttc" id="structsecp256k1__scalar_html"><div class="ttname"><a href="structsecp256k1__scalar.html">secp256k1_scalar</a></div><div class="ttdef"><b>Definition:</b> <a href="scalar__4x64_8h_source.html#l00013">scalar_4x64.h:13</a></div></div>
|
|
<div class="ttc" id="structsecp256k1__ge_html_a1cdb35fe7abf6f17c08e4375eeb26628"><div class="ttname"><a href="structsecp256k1__ge.html#a1cdb35fe7abf6f17c08e4375eeb26628">secp256k1_ge::infinity</a></div><div class="ttdeci">int infinity</div><div class="ttdef"><b>Definition:</b> <a href="group_8h_source.html#l00017">group.h:17</a></div></div>
|
|
<div class="ttc" id="ecmult__gen__impl_8h_html_a7e41f045cb4901a4eba781966fa35abd"><div class="ttname"><a href="ecmult__gen__impl_8h.html#a7e41f045cb4901a4eba781966fa35abd">secp256k1_ecmult_gen_blind</a></div><div class="ttdeci">static void secp256k1_ecmult_gen_blind(secp256k1_ecmult_gen_context *ctx, const unsigned char *seed32)</div><div class="ttdef"><b>Definition:</b> <a href="ecmult__gen__impl_8h_source.html#l00159">ecmult_gen_impl.h:159</a></div></div>
|
|
<div class="ttc" id="ecmult__gen__impl_8h_html_a9a40662d6ed2cbab43dbddc25f570f97"><div class="ttname"><a href="ecmult__gen__impl_8h.html#a9a40662d6ed2cbab43dbddc25f570f97">secp256k1_ecmult_gen_context_is_built</a></div><div class="ttdeci">static int secp256k1_ecmult_gen_context_is_built(const secp256k1_ecmult_gen_context *ctx)</div><div class="ttdef"><b>Definition:</b> <a href="ecmult__gen__impl_8h_source.html#l00094">ecmult_gen_impl.h:94</a></div></div>
|
|
<div class="ttc" id="scalar_8h_html_a4fa08f8af5a23f505b44c9ef1bec1831"><div class="ttname"><a href="scalar_8h.html#a4fa08f8af5a23f505b44c9ef1bec1831">secp256k1_scalar_get_b32</a></div><div class="ttdeci">static void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar *a)</div></div>
|
|
<div class="ttc" id="group_8h_html_a3c3d9154b093bb4ed48ba55e4c28a0b5"><div class="ttname"><a href="group_8h.html#a3c3d9154b093bb4ed48ba55e4c28a0b5">secp256k1_ge_set_xo_var</a></div><div class="ttdeci">static int secp256k1_ge_set_xo_var(secp256k1_ge *r, const secp256k1_fe *x, int odd)</div></div>
|
|
<div class="ttc" id="field_8h_html_a5c86a65052e3b135919c00fe2233a43d"><div class="ttname"><a href="field_8h.html#a5c86a65052e3b135919c00fe2233a43d">secp256k1_fe_set_b32</a></div><div class="ttdeci">static int secp256k1_fe_set_b32(secp256k1_fe *r, const unsigned char *a)</div></div>
|
|
<div class="ttc" id="group_8h_html_a96ba360f6eb5f21c88e019e741a098ee"><div class="ttname"><a href="group_8h.html#a96ba360f6eb5f21c88e019e741a098ee">secp256k1_gej_rescale</a></div><div class="ttdeci">static void secp256k1_gej_rescale(secp256k1_gej *r, const secp256k1_fe *b)</div></div>
|
|
<div class="ttc" id="scalar_8h_html_a83257652850276cd74c7cdd1f9444d9c"><div class="ttname"><a href="scalar_8h.html#a83257652850276cd74c7cdd1f9444d9c">secp256k1_scalar_add</a></div><div class="ttdeci">static int secp256k1_scalar_add(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b)</div></div>
|
|
<div class="ttc" id="scalar_8h_html_a41cb11650e4dea0fe7ac5b59b9fce9dc"><div class="ttname"><a href="scalar_8h.html#a41cb11650e4dea0fe7ac5b59b9fce9dc">secp256k1_scalar_set_int</a></div><div class="ttdeci">static void secp256k1_scalar_set_int(secp256k1_scalar *r, unsigned int v)</div></div>
|
|
<div class="ttc" id="group_8h_html_ada58b0cf328a74cfdd1f8b35083668a1"><div class="ttname"><a href="group_8h.html#ada58b0cf328a74cfdd1f8b35083668a1">secp256k1_ge_set_all_gej_var</a></div><div class="ttdeci">static void secp256k1_ge_set_all_gej_var(size_t len, secp256k1_ge *r, const secp256k1_gej *a, const secp256k1_callback *cb)</div></div>
|
|
<div class="ttc" id="glibc__compat_8cpp_html_a0f46826ab0466591e136db24394923cf"><div class="ttname"><a href="glibc__compat_8cpp.html#a0f46826ab0466591e136db24394923cf">memcpy</a></div><div class="ttdeci">void * memcpy(void *a, const void *b, size_t c)</div><div class="ttdef"><b>Definition:</b> <a href="glibc__compat_8cpp_source.html#l00017">glibc_compat.cpp:17</a></div></div>
|
|
<div class="ttc" id="ecmult__gen__impl_8h_html_a2832f924fc8c5c9d0540d808ccdd7072"><div class="ttname"><a href="ecmult__gen__impl_8h.html#a2832f924fc8c5c9d0540d808ccdd7072">secp256k1_ecmult_gen_context_clear</a></div><div class="ttdeci">static void secp256k1_ecmult_gen_context_clear(secp256k1_ecmult_gen_context *ctx)</div><div class="ttdef"><b>Definition:</b> <a href="ecmult__gen__impl_8h_source.html#l00115">ecmult_gen_impl.h:115</a></div></div>
|
|
<div class="ttc" id="ecmult__gen__impl_8h_html_afaf90b2a6554053187cdc89df0dafd21"><div class="ttname"><a href="ecmult__gen__impl_8h.html#afaf90b2a6554053187cdc89df0dafd21">secp256k1_ecmult_gen_context_build</a></div><div class="ttdeci">static void secp256k1_ecmult_gen_context_build(secp256k1_ecmult_gen_context *ctx, const secp256k1_callback *cb)</div><div class="ttdef"><b>Definition:</b> <a href="ecmult__gen__impl_8h_source.html#l00021">ecmult_gen_impl.h:21</a></div></div>
|
|
<div class="ttc" id="ecmult__static__context_8h_html"><div class="ttname"><a href="ecmult__static__context_8h.html">ecmult_static_context.h</a></div></div>
|
|
<div class="ttc" id="structsecp256k1__ecmult__gen__context_html_ad1ebc8daeace10a8d646f89bbdf32882"><div class="ttname"><a href="structsecp256k1__ecmult__gen__context.html#ad1ebc8daeace10a8d646f89bbdf32882">secp256k1_ecmult_gen_context::prec</a></div><div class="ttdeci">secp256k1_ge_storage(* prec)[64][16]</div><div class="ttdef"><b>Definition:</b> <a href="ecmult__gen_8h_source.html#l00026">ecmult_gen.h:26</a></div></div>
|
|
<div class="ttc" id="group_8h_html_a586b55d5921edcd68799f584c0a3c58d"><div class="ttname"><a href="group_8h.html#a586b55d5921edcd68799f584c0a3c58d">secp256k1_gej_add_ge</a></div><div class="ttdeci">static void secp256k1_gej_add_ge(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b)</div></div>
|
|
<div class="ttc" id="ecmult__static__context_8h_html_a8a5c6caf185ac8ce552d2059f647807e"><div class="ttname"><a href="ecmult__static__context_8h.html#a8a5c6caf185ac8ce552d2059f647807e">secp256k1_ecmult_static_context</a></div><div class="ttdeci">static const secp256k1_ge_storage secp256k1_ecmult_static_context[64][16]</div><div class="ttdef"><b>Definition:</b> <a href="ecmult__static__context_8h_source.html#l00005">ecmult_static_context.h:5</a></div></div>
|
|
<div class="ttc" id="group_8h_html_a8c1e7f328284d9ba56404bb8d99bf765"><div class="ttname"><a href="group_8h.html#a8c1e7f328284d9ba56404bb8d99bf765">secp256k1_ge_from_storage</a></div><div class="ttdeci">static void secp256k1_ge_from_storage(secp256k1_ge *r, const secp256k1_ge_storage *a)</div></div>
|
|
<div class="ttc" id="group_8h_html_ad5f813e26afb239f03e83f0e61e05498"><div class="ttname"><a href="group_8h.html#ad5f813e26afb239f03e83f0e61e05498">secp256k1_gej_set_ge</a></div><div class="ttdeci">static void secp256k1_gej_set_ge(secp256k1_gej *r, const secp256k1_ge *a)</div></div>
|
|
<div class="ttc" id="structsecp256k1__ecmult__gen__context_html_a1ebfe4de83e25248ea9d989d06c9b069"><div class="ttname"><a href="structsecp256k1__ecmult__gen__context.html#a1ebfe4de83e25248ea9d989d06c9b069">secp256k1_ecmult_gen_context::initial</a></div><div class="ttdeci">secp256k1_gej initial</div><div class="ttdef"><b>Definition:</b> <a href="ecmult__gen_8h_source.html#l00028">ecmult_gen.h:28</a></div></div>
|
|
<div class="ttc" id="structsecp256k1__callback_html"><div class="ttname"><a href="structsecp256k1__callback.html">secp256k1_callback</a></div><div class="ttdef"><b>Definition:</b> <a href="secp256k1_2src_2util_8h_source.html#l00018">util.h:18</a></div></div>
|
|
<div class="ttc" id="group_8h_html_ad6499ae629f998e50d8614869ee3c67f"><div class="ttname"><a href="group_8h.html#ad6499ae629f998e50d8614869ee3c67f">secp256k1_ge_to_storage</a></div><div class="ttdeci">static void secp256k1_ge_to_storage(secp256k1_ge_storage *r, const secp256k1_ge *a)</div></div>
|
|
<div class="ttc" id="secp256k1_2src_2util_8h_html_a20790114658c559e5048a38694708c3e"><div class="ttname"><a href="secp256k1_2src_2util_8h.html#a20790114658c559e5048a38694708c3e">checked_malloc</a></div><div class="ttdeci">static SECP256K1_INLINE void * checked_malloc(const secp256k1_callback *cb, size_t size)</div><div class="ttdef"><b>Definition:</b> <a href="secp256k1_2src_2util_8h_source.html#l00068">util.h:68</a></div></div>
|
|
</div><!-- fragment --></div><!-- contents -->
|
|
</div><!-- doc-content -->
|
|
<!-- start footer part -->
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|
<ul>
|
|
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_44f34d1e62fda08bdb4ca69ab2d205ae.html">secp256k1</a></li><li class="navelem"><a class="el" href="dir_8db2ef784512d48b2a7d00369dfaac28.html">src</a></li><li class="navelem"><a class="el" href="ecmult__gen__impl_8h.html">ecmult_gen_impl.h</a></li>
|
|
<li class="footer">Generated on Thu Dec 14 2017 13:15:08 for Dash Core by
|
|
<a href="http://www.doxygen.org/index.html">
|
|
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.14 </li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|