Math.Gmp.Native/docs/html/b82bad6a-f8f0-db53-a6d3-ed6002046257.htm

68 lines
100 KiB
HTML
Raw Normal View History

2017-12-15 02:18:55 +01:00
<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>gmp_lib.mpn_cnd_sub_n Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="mpn_cnd_sub_n method" /><meta name="System.Keywords" content="gmp_lib.mpn_cnd_sub_n method" /><meta name="Microsoft.Help.F1" content="Math.Gmp.Native.gmp_lib.mpn_cnd_sub_n" /><meta name="Microsoft.Help.Id" content="M:Math.Gmp.Native.gmp_lib.mpn_cnd_sub_n(Math.Gmp.Native.mp_limb_t,Math.Gmp.Native.mp_ptr,Math.Gmp.Native.mp_ptr,Math.Gmp.Native.mp_ptr,Math.Gmp.Native.mp_size_t)" /><meta name="Description" content="If is non-zero, it produces the same result as a regular mpn_sub_n, and if is zero, it copies {, } to the result area and returns zero." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Math.Gmp.Native" /><meta name="file" content="b82bad6a-f8f0-db53-a6d3-ed6002046257" /><meta name="guid" content="b82bad6a-f8f0-db53-a6d3-ed6002046257" /><link type="text/css" rel="stylesheet" href="../styles/highlight.css" /><script type="text/javascript" src="../scripts/highlight.js"> </script><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">GMP Native Interface for .NET<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="846f5c8a-6cba-433e-9f18-cde2ff5695cd.htm" title="GMP Native Interface for .NET" tocid="roottoc">GMP Native Interface for .NET</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="d9c51b9f-0c54-770b-28ea-6eebd8fef368.htm" title="Math.Gmp.Native" tocid="d9c51b9f-0c54-770b-28ea-6eebd8fef368">Math.Gmp.Native</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="3af6b34c-3242-2b75-e7c7-ab79af8a4b0f.htm" title="gmp_lib Class" tocid="3af6b34c-3242-2b75-e7c7-ab79af8a4b0f">gmp_lib Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="0fa7cbf3-e8f4-6b14-d829-8aa663e77c74.htm" title="gmp_lib Methods" tocid="0fa7cbf3-e8f4-6b14-d829-8aa663e77c74">gmp_lib Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="c9cb6a67-59b8-5c03-f31d-f252441c53f6.htm" title="_mpz_realloc Method " tocid="c9cb6a67-59b8-5c03-f31d-f252441c53f6">_mpz_realloc Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="2c68671c-cd5c-e2ec-52a2-65b0ca31c3d1.htm" title="allocate Method " tocid="2c68671c-cd5c-e2ec-52a2-65b0ca31c3d1">allocate Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="92160da3-b1af-e005-cb05-e3fb4dd524d8.htm" title="free Met
If <span class="parameter">cnd</span> is non-zero, it produces the same result as a regular <a href="b104184e-cf49-dbdb-764a-9dee5cf7b2fd.htm">mpn_sub_n</a>, and if <span class="parameter">cnd</span> is zero, it copies {<span class="parameter">s1p</span>, <span class="parameter">n</span>} to the result area and returns zero.
2017-11-04 16:02:37 +01:00
</div><p> </p>
<strong>Namespace:</strong>
 <a href="d9c51b9f-0c54-770b-28ea-6eebd8fef368.htm">Math.Gmp.Native</a><br />
<strong>Assembly:</strong>
 Math.Gmp.Native (in Math.Gmp.Native.dll) Version: 1.0.0.0 (1.0.0.0)<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" class="copyCodeSnippet" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="identifier">mp_limb_t</span> <span class="identifier">mpn_cnd_sub_n</span>(
<span class="identifier">mp_limb_t</span> <span class="parameter">cnd</span>,
<span class="identifier">mp_ptr</span> <span class="parameter">rp</span>,
<span class="identifier">mp_ptr</span> <span class="parameter">s1p</span>,
<span class="identifier">mp_ptr</span> <span class="parameter">s2p</span>,
<span class="identifier">mp_size_t</span> <span class="parameter">n</span>
)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Function</span> <span class="identifier">mpn_cnd_sub_n</span> (
<span class="parameter">cnd</span> <span class="keyword">As</span> <span class="identifier">mp_limb_t</span>,
<span class="parameter">rp</span> <span class="keyword">As</span> <span class="identifier">mp_ptr</span>,
<span class="parameter">s1p</span> <span class="keyword">As</span> <span class="identifier">mp_ptr</span>,
<span class="parameter">s2p</span> <span class="keyword">As</span> <span class="identifier">mp_ptr</span>,
<span class="parameter">n</span> <span class="keyword">As</span> <span class="identifier">mp_size_t</span>
) <span class="keyword">As</span> <span class="identifier">mp_limb_t</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
<span class="keyword">static</span> <span class="identifier">mp_limb_t</span> <span class="identifier">mpn_cnd_sub_n</span>(
<span class="identifier">mp_limb_t</span> <span class="parameter">cnd</span>,
<span class="identifier">mp_ptr</span>^ <span class="parameter">rp</span>,
<span class="identifier">mp_ptr</span>^ <span class="parameter">s1p</span>,
<span class="identifier">mp_ptr</span>^ <span class="parameter">s2p</span>,
<span class="identifier">mp_size_t</span> <span class="parameter">n</span>
)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">mpn_cnd_sub_n</span> :
<span class="parameter">cnd</span> : <span class="identifier">mp_limb_t</span> *
<span class="parameter">rp</span> : <span class="identifier">mp_ptr</span> *
<span class="parameter">s1p</span> : <span class="identifier">mp_ptr</span> *
<span class="parameter">s2p</span> : <span class="identifier">mp_ptr</span> *
<span class="parameter">n</span> : <span class="identifier">mp_size_t</span> <span class="keyword">-&gt;</span> <span class="identifier">mp_limb_t</span>
2017-11-08 01:29:10 +01:00
</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">cnd</span></dt><dd>Type: <a href="bf1f694d-f9b2-6413-12e5-ebae603d5b49.htm">Math.Gmp.Native<span id="LSTEABE3FE_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEABE3FE_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mp_limb_t</a><br />Conditonal value: non-zero for true, zero for false.</dd><dt><span class="parameter">rp</span></dt><dd>Type: <a href="4609ac5e-5cf9-cd20-2fa9-8040101c165c.htm">Math.Gmp.Native<span id="LSTEABE3FE_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEABE3FE_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mp_ptr</a><br />The result integer.</dd><dt><span class="parameter">s1p</span></dt><dd>Type: <a href="4609ac5e-5cf9-cd20-2fa9-8040101c165c.htm">Math.Gmp.Native<span id="LSTEABE3FE_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEABE3FE_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mp_ptr</a><br />The first operand integer.</dd><dt><span class="parameter">s2p</span></dt><dd>Type: <a href="4609ac5e-5cf9-cd20-2fa9-8040101c165c.htm">Math.Gmp.Native<span id="LSTEABE3FE_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEABE3FE_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mp_ptr</a><br />The second operand integer.</dd><dt><span class="parameter">n</span></dt><dd>Type: <a href="4b58a584-7a0e-b600-18fa-ebd493861eb3.htm">Math.Gmp.Native<span id="LSTEABE3FE_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEABE3FE_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mp_size_t</a><br />The number of limbs of <span class="parameter">s1p</span> and <span class="parameter">s2p</span>.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="bf1f694d-f9b2-6413-12e5-ebae603d5b49.htm">mp_limb_t</a><br />If <span class="parameter">cnd</span> is non-zero, return borrow, either 0 or 1, and if <span class="parameter">cnd</span> is zero, return 0.</div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Remarks</span></div><div id="ID2RBSection" class="collapsibleSection"><p>
2017-11-04 16:02:37 +01:00
This function does conditional addition.
2017-12-15 02:18:55 +01:00
If <span class="parameter">cnd</span> is non-zero, it produces the same result as a regular <a href="b104184e-cf49-dbdb-764a-9dee5cf7b2fd.htm">mpn_sub_n</a>,
2017-11-04 16:02:37 +01:00
and if <span class="parameter">cnd</span> is zero, it copies {<span class="parameter">s1p</span>, <span class="parameter">n</span>} to the result area and returns zero.
The functions is designed to have timing and memory access patterns depending only
on size and location of the data areas, but independent of the condition <span class="parameter">cnd</span>.
2017-12-15 02:18:55 +01:00
Like for <a href="b104184e-cf49-dbdb-764a-9dee5cf7b2fd.htm">mpn_sub_n</a>, on most machines, the timing will also be independent
2017-11-04 16:02:37 +01:00
of the actual limb values.
</p></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Examples</span></div><div id="ID3RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDAABA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDAABA','cs','1','4');return false;">C#</a></div><div id="ID0EDAABA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDAABA','vb','2','4');return false;">VB</a></div><div id="ID0EDAABA_tab3" class="codeSnippetContainerTabPhantom"><a href="#" onclick="javascript:ChangeTab('ID0EDAABA','cpp','3','4');return false;">C++</a></div><div id="ID0EDAABA_tab4" class="codeSnippetContainerTabPhantom"><a href="#" onclick="javascript:ChangeTab('ID0EDAABA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDAABA_copyCode" href="#" class="copyCodeSnippet" onclick="javascript:CopyToClipboard('ID0EDAABA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDAABA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="highlight-comment">// Create multi-precision operands, and expected result.</span>
mp_ptr s1p = <span class="highlight-keyword">new</span> mp_ptr(<span class="highlight-keyword">new</span> <span class="highlight-keyword">uint</span>[] { <span class="highlight-number">0xffffffff</span>, <span class="highlight-number">0xffffffff</span> });
mp_ptr s2p = <span class="highlight-keyword">new</span> mp_ptr(<span class="highlight-keyword">new</span> <span class="highlight-keyword">uint</span>[] { <span class="highlight-number">0x00000001</span>, <span class="highlight-number">0x00000000</span> });
mp_ptr rp = <span class="highlight-keyword">new</span> mp_ptr(<span class="highlight-keyword">new</span> <span class="highlight-keyword">uint</span>[<span class="highlight-number">2</span>]);
mp_ptr result = <span class="highlight-keyword">new</span> mp_ptr(<span class="highlight-keyword">new</span> <span class="highlight-keyword">uint</span>[] { <span class="highlight-number">0xfffffffe</span>, <span class="highlight-number">0xffffffff</span> });
<span class="highlight-comment">// Set rp = s1 - s2.</span>
mp_limb_t borrow = gmp_lib.mpn_cnd_sub_n(<span class="highlight-number">1</span>, rp, s1p, s2p, rp.Size);
<span class="highlight-comment">// Assert result of operation.</span>
Assert.IsTrue(borrow == <span class="highlight-number">0</span>);
Assert.IsTrue(rp.SequenceEqual(result));
<span class="highlight-comment">// Release unmanaged memory.</span>
gmp_lib.free(rp, s1p, s2p, result);</pre></div><div id="ID0EDAABA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="highlight-comment">' Create multi-precision operands, and expected result.</span>
<span class="highlight-keyword">Dim</span> s1p <span class="highlight-keyword">As</span> <span class="highlight-keyword">New</span> mp_ptr(<span class="highlight-keyword">New</span> <span class="highlight-keyword">UInteger</span>() { <span class="highlight-number">&amp;Hffffffff</span>UI, <span class="highlight-number">&amp;Hffffffff</span>UI})
<span class="highlight-keyword">Dim</span> s2p <span class="highlight-keyword">As</span> <span class="highlight-keyword">New</span> mp_ptr(<span class="highlight-keyword">New</span> <span class="highlight-keyword">UInteger</span>() { <span class="highlight-number">&amp;H1</span>, <span class="highlight-number">&amp;H0</span>})
<span class="highlight-keyword">Dim</span> rp <span class="highlight-keyword">As</span> <span class="highlight-keyword">New</span> mp_ptr(<span class="highlight-keyword">New</span> <span class="highlight-keyword">UInteger</span>(<span class="highlight-number">1</span>) { })
<span class="highlight-keyword">Dim</span> result <span class="highlight-keyword">As</span> <span class="highlight-keyword">New</span> mp_ptr(<span class="highlight-keyword">New</span> <span class="highlight-keyword">UInteger</span>() { <span class="highlight-number">&amp;Hfffffffe</span>UI, <span class="highlight-number">&amp;Hffffffff</span>UI})
<span class="highlight-comment">' Set rp = s1 - s2.</span>
<span class="highlight-keyword">Dim</span> borrow <span class="highlight-keyword">As</span> mp_limb_t = gmp_lib.mpn_cnd_sub_n(<span class="highlight-number">1</span>, rp, s1p, s2p, rp.Size)
<span class="highlight-comment">' Assert result of operation.</span>
Assert.IsTrue(borrow = <span class="highlight-number">0</span>)
Assert.IsTrue(rp.SequenceEqual(result))
<span class="highlight-comment">' Release unmanaged memory.</span>
2018-01-06 17:23:30 +01:00
gmp_lib.free(rp, s1p, s2p, result)</pre></div><div id="ID0EDAABA_code_Div3" class="codeSnippetContainerCode" style="display: none"><p>No code example is currently available or this language may not be supported.</p></div><div id="ID0EDAABA_code_Div4" class="codeSnippetContainerCode" style="display: none"><p>No code example is currently available or this language may not be supported.</p></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDAABA");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID4RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="3af6b34c-3242-2b75-e7c7-ab79af8a4b0f.htm">gmp_lib Class</a></div><div class="seeAlsoStyle"><a href="d9c51b9f-0c54-770b-28ea-6eebd8fef368.htm">Math.Gmp.Native Namespace</a></div><div class="seeAlsoStyle"><a href="27902901-3a7d-b5b3-d3fc-3900f754bff1.htm">mpn_cnd_add_n</a></div><div class="seeAlsoStyle"><a href="1555cd52-98d2-6253-214a-d342a539bfb5.htm">mpn_sec_add_1</a></div><div class="seeAlsoStyle"><a href="9137a632-abd2-7963-1991-85e6d753bf13.htm">mpn_sec_sub_1</a></div><div class="seeAlsoStyle"><a href="f0985ccc-17da-8a0b-066c-53df9b1921a1.htm">mpn_cnd_swap</a></div><div class="seeAlsoStyle"><a href="028e92d4-3699-77ff-e8da-9ff4c367f5b3.htm">mpn_sec_mul</a></div><div class="seeAlsoStyle"><a href="bfe1e9b5-6fc1-95f2-d5b6-137fe87c071a.htm">mpn_sec_sqr</a></div><div class="seeAlsoStyle"><a href="a38b87c5-c6ac-fa68-6d58-c45793bf933e.htm">mpn_sec_powm</a></div><div class="seeAlsoStyle"><a href="3588cf60-567a-6182-20e8-5e2836498f49.htm">mpn_sec_tabselect</a></div><div class="seeAlsoStyle"><a href="6f1dca2b-39f4-3acd-71fb-4f1e5a0d04e6.htm">mpn_sec_div_qr</a></div><div class="seeAlsoStyle"><a href="094ea390-8cc8-bac7-35c3-3616775736de.htm">mpn_sec_div_r</a></div><div class="seeAlsoStyle"><a href="62ffb793-b32f-e0dc-a399-f20fe708a803.htm">mpn_sec_invert</a></div><div class="seeAlsoStyle"><a href="3af6b34c-3242-2b75-e7c7-ab79af8a4b0f.htm"><a href="/Math.Gmp.Native/html/3af6b34c-3242-2b75-e7c7-ab79af8a4b0f.htm#Low_level_functions_for_cryptography">Low-level functions for cryptography</a></a></div><div class="seeAlsoStyle"><a href="3af6b34c-3242-2b75-e7c7-ab79af8a4b0f.htm"><a href="https://gmplib.org/manual/Low_002dlevel-Functions.html#Low_002dlevel-Functions">GNU MP - Low-level Functions</a></a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html>