Files
KSDK_2.0_MK22FN512xxx12/docs/Kinetis SDK v.2.0 API Reference Manual/group__ltc__driver__pkha.html
2016-08-09 18:06:35 +02:00

1630 lines
85 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.6"/>
<title>Kinetis SDK v.2.0 API Reference Manual: LTC PKHA driver</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="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="customdoxygen.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="fs_logo.gif"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">Kinetis SDK v.2.0 API Reference Manual
&#160;<span id="projectnumber">Rev. 0</span>
</div>
<div id="projectbrief">Freescale Semiconductor, Inc.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>API&#160;Reference</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</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">
$(document).ready(function(){initNavTree('group__ltc__driver__pkha.html','');});
</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)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Pages</a></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="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">LTC PKHA driver<div class="ingroups"><a class="el" href="group__ltc__driver__synchronous__blocking.html">LTC Blocking APIs</a></div></div> </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Overview</h2>
<p>This section describes the programming interface of the LTC PKHA driver. </p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:structltc__pkha__ecc__point__t"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#structltc__pkha__ecc__point__t">ltc_pkha_ecc_point_t</a></td></tr>
<tr class="memdesc:structltc__pkha__ecc__point__t"><td class="mdescLeft">&#160;</td><td class="mdescRight">PKHA ECC point structure. <a href="group__ltc__driver__pkha.html#structltc__pkha__ecc__point__t">More...</a><br/></td></tr>
<tr class="separator:structltc__pkha__ecc__point__t"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga1a1e15f2277e244b7e580d7ad7af413f"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#ga1a1e15f2277e244b7e580d7ad7af413f">ltc_pkha_timing_t</a> </td></tr>
<tr class="memdesc:ga1a1e15f2277e244b7e580d7ad7af413f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Use of timing equalized version of a PKHA function. <a href="group__ltc__driver__pkha.html#ga1a1e15f2277e244b7e580d7ad7af413f">More...</a><br/></td></tr>
<tr class="separator:ga1a1e15f2277e244b7e580d7ad7af413f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8508a97598439c72c545da28868be18e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a> { <br/>
&#160;&#160;<a class="el" href="group__ltc__driver__pkha.html#gga8508a97598439c72c545da28868be18ea785f77826b6a2d1398ac75bab7dfa95c">kLTC_PKHA_IntegerArith</a> = 0U,
<br/>
&#160;&#160;<a class="el" href="group__ltc__driver__pkha.html#gga8508a97598439c72c545da28868be18eafb3307389575323e97c9f2d8ed9d7599">kLTC_PKHA_F2mArith</a> = 1U
<br/>
}</td></tr>
<tr class="memdesc:ga8508a97598439c72c545da28868be18e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Integer vs binary polynomial arithmetic selection. <a href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">More...</a><br/></td></tr>
<tr class="separator:ga8508a97598439c72c545da28868be18e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4d4f275b705ffe36b9d60f32d7d27cc6"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#ga4d4f275b705ffe36b9d60f32d7d27cc6">ltc_pkha_montgomery_form_t</a> </td></tr>
<tr class="memdesc:ga4d4f275b705ffe36b9d60f32d7d27cc6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Montgomery or normal PKHA input format. <a href="group__ltc__driver__pkha.html#ga4d4f275b705ffe36b9d60f32d7d27cc6">More...</a><br/></td></tr>
<tr class="separator:ga4d4f275b705ffe36b9d60f32d7d27cc6"><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:ga22e83f89815b78214f688c26a8e6c344"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#ga22e83f89815b78214f688c26a8e6c344">LTC_PKHA_CompareBigNum</a> (const uint8_t *a, size_t sizeA, const uint8_t *b, size_t sizeB)</td></tr>
<tr class="memdesc:ga22e83f89815b78214f688c26a8e6c344"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compare two PKHA big numbers. <a href="#ga22e83f89815b78214f688c26a8e6c344">More...</a><br/></td></tr>
<tr class="separator:ga22e83f89815b78214f688c26a8e6c344"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga07698c3cd156c18f626aa80dbc5a52b5"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#ga07698c3cd156c18f626aa80dbc5a52b5">LTC_PKHA_NormalToMontgomery</a> (LTC_Type *base, const uint8_t *N, uint16_t sizeN, uint8_t *A, uint16_t *sizeA, uint8_t *B, uint16_t *sizeB, uint8_t *R2, uint16_t *sizeR2, <a class="el" href="group__ltc__driver__pkha.html#ga1a1e15f2277e244b7e580d7ad7af413f">ltc_pkha_timing_t</a> equalTime, <a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a> arithType)</td></tr>
<tr class="memdesc:ga07698c3cd156c18f626aa80dbc5a52b5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts from integer to Montgomery format. <a href="#ga07698c3cd156c18f626aa80dbc5a52b5">More...</a><br/></td></tr>
<tr class="separator:ga07698c3cd156c18f626aa80dbc5a52b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga958274310363008ee89beb8b779a898f"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#ga958274310363008ee89beb8b779a898f">LTC_PKHA_MontgomeryToNormal</a> (LTC_Type *base, const uint8_t *N, uint16_t sizeN, uint8_t *A, uint16_t *sizeA, uint8_t *B, uint16_t *sizeB, <a class="el" href="group__ltc__driver__pkha.html#ga1a1e15f2277e244b7e580d7ad7af413f">ltc_pkha_timing_t</a> equalTime, <a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a> arithType)</td></tr>
<tr class="memdesc:ga958274310363008ee89beb8b779a898f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts from Montgomery format to int. <a href="#ga958274310363008ee89beb8b779a898f">More...</a><br/></td></tr>
<tr class="separator:ga958274310363008ee89beb8b779a898f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacee6ff900a73419aaf9d37622e5c8e67"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#gacee6ff900a73419aaf9d37622e5c8e67">LTC_PKHA_ModAdd</a> (LTC_Type *base, const uint8_t *A, uint16_t sizeA, const uint8_t *B, uint16_t sizeB, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize, <a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a> arithType)</td></tr>
<tr class="memdesc:gacee6ff900a73419aaf9d37622e5c8e67"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs modular addition - (A + B) mod N. <a href="#gacee6ff900a73419aaf9d37622e5c8e67">More...</a><br/></td></tr>
<tr class="separator:gacee6ff900a73419aaf9d37622e5c8e67"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga39985cfeb0d9fd6114ae844b3cbfb20f"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#ga39985cfeb0d9fd6114ae844b3cbfb20f">LTC_PKHA_ModSub1</a> (LTC_Type *base, const uint8_t *A, uint16_t sizeA, const uint8_t *B, uint16_t sizeB, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize)</td></tr>
<tr class="memdesc:ga39985cfeb0d9fd6114ae844b3cbfb20f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs modular subtraction - (A - B) mod N. <a href="#ga39985cfeb0d9fd6114ae844b3cbfb20f">More...</a><br/></td></tr>
<tr class="separator:ga39985cfeb0d9fd6114ae844b3cbfb20f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga08a506cf934772af448bdb08012ffda9"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#ga08a506cf934772af448bdb08012ffda9">LTC_PKHA_ModSub2</a> (LTC_Type *base, const uint8_t *A, uint16_t sizeA, const uint8_t *B, uint16_t sizeB, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize)</td></tr>
<tr class="memdesc:ga08a506cf934772af448bdb08012ffda9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs modular subtraction - (B - A) mod N. <a href="#ga08a506cf934772af448bdb08012ffda9">More...</a><br/></td></tr>
<tr class="separator:ga08a506cf934772af448bdb08012ffda9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac6c6d8bff88bf3e37e7dcebb6802aac5"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#gac6c6d8bff88bf3e37e7dcebb6802aac5">LTC_PKHA_ModMul</a> (LTC_Type *base, const uint8_t *A, uint16_t sizeA, const uint8_t *B, uint16_t sizeB, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize, <a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a> arithType, <a class="el" href="group__ltc__driver__pkha.html#ga4d4f275b705ffe36b9d60f32d7d27cc6">ltc_pkha_montgomery_form_t</a> montIn, <a class="el" href="group__ltc__driver__pkha.html#ga4d4f275b705ffe36b9d60f32d7d27cc6">ltc_pkha_montgomery_form_t</a> montOut, <a class="el" href="group__ltc__driver__pkha.html#ga1a1e15f2277e244b7e580d7ad7af413f">ltc_pkha_timing_t</a> equalTime)</td></tr>
<tr class="memdesc:gac6c6d8bff88bf3e37e7dcebb6802aac5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs modular multiplication - (A x B) mod N. <a href="#gac6c6d8bff88bf3e37e7dcebb6802aac5">More...</a><br/></td></tr>
<tr class="separator:gac6c6d8bff88bf3e37e7dcebb6802aac5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3c62dbae643f27b19726964358c36c7f"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#ga3c62dbae643f27b19726964358c36c7f">LTC_PKHA_ModExp</a> (LTC_Type *base, const uint8_t *A, uint16_t sizeA, const uint8_t *N, uint16_t sizeN, const uint8_t *E, uint16_t sizeE, uint8_t *result, uint16_t *resultSize, <a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a> arithType, <a class="el" href="group__ltc__driver__pkha.html#ga4d4f275b705ffe36b9d60f32d7d27cc6">ltc_pkha_montgomery_form_t</a> montIn, <a class="el" href="group__ltc__driver__pkha.html#ga1a1e15f2277e244b7e580d7ad7af413f">ltc_pkha_timing_t</a> equalTime)</td></tr>
<tr class="memdesc:ga3c62dbae643f27b19726964358c36c7f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs modular exponentiation - (A^E) mod N. <a href="#ga3c62dbae643f27b19726964358c36c7f">More...</a><br/></td></tr>
<tr class="separator:ga3c62dbae643f27b19726964358c36c7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga09f40086387a472461efcc60cf6f972d"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#ga09f40086387a472461efcc60cf6f972d">LTC_PKHA_ModRed</a> (LTC_Type *base, const uint8_t *A, uint16_t sizeA, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize, <a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a> arithType)</td></tr>
<tr class="memdesc:ga09f40086387a472461efcc60cf6f972d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs modular reduction - (A) mod N. <a href="#ga09f40086387a472461efcc60cf6f972d">More...</a><br/></td></tr>
<tr class="separator:ga09f40086387a472461efcc60cf6f972d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab2af1166c1d55fe8e2b73816ef8f7c1e"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#gab2af1166c1d55fe8e2b73816ef8f7c1e">LTC_PKHA_ModInv</a> (LTC_Type *base, const uint8_t *A, uint16_t sizeA, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize, <a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a> arithType)</td></tr>
<tr class="memdesc:gab2af1166c1d55fe8e2b73816ef8f7c1e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs modular inversion - (A^-1) mod N. <a href="#gab2af1166c1d55fe8e2b73816ef8f7c1e">More...</a><br/></td></tr>
<tr class="separator:gab2af1166c1d55fe8e2b73816ef8f7c1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga53e0e41f5c0e4c6db46bb9b9ae3cb2a4"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#ga53e0e41f5c0e4c6db46bb9b9ae3cb2a4">LTC_PKHA_ModR2</a> (LTC_Type *base, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize, <a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a> arithType)</td></tr>
<tr class="memdesc:ga53e0e41f5c0e4c6db46bb9b9ae3cb2a4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes integer Montgomery factor R^2 mod N. <a href="#ga53e0e41f5c0e4c6db46bb9b9ae3cb2a4">More...</a><br/></td></tr>
<tr class="separator:ga53e0e41f5c0e4c6db46bb9b9ae3cb2a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaadbda56785d9749b8cf0bcba5ad61dbf"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#gaadbda56785d9749b8cf0bcba5ad61dbf">LTC_PKHA_GCD</a> (LTC_Type *base, const uint8_t *A, uint16_t sizeA, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize, <a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a> arithType)</td></tr>
<tr class="memdesc:gaadbda56785d9749b8cf0bcba5ad61dbf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates the greatest common divisor - GCD (A, N). <a href="#gaadbda56785d9749b8cf0bcba5ad61dbf">More...</a><br/></td></tr>
<tr class="separator:gaadbda56785d9749b8cf0bcba5ad61dbf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae04c2c3b7d0e49c7772ab9f388057022"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#gae04c2c3b7d0e49c7772ab9f388057022">LTC_PKHA_PrimalityTest</a> (LTC_Type *base, const uint8_t *A, uint16_t sizeA, const uint8_t *B, uint16_t sizeB, const uint8_t *N, uint16_t sizeN, bool *res)</td></tr>
<tr class="memdesc:gae04c2c3b7d0e49c7772ab9f388057022"><td class="mdescLeft">&#160;</td><td class="mdescRight">Executes Miller-Rabin primality test. <a href="#gae04c2c3b7d0e49c7772ab9f388057022">More...</a><br/></td></tr>
<tr class="separator:gae04c2c3b7d0e49c7772ab9f388057022"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4b6d46f35209f5f0743ef646273ca351"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#ga4b6d46f35209f5f0743ef646273ca351">LTC_PKHA_ECC_PointAdd</a> (LTC_Type *base, const <a class="el" href="group__ltc__driver__pkha.html#structltc__pkha__ecc__point__t">ltc_pkha_ecc_point_t</a> *A, const <a class="el" href="group__ltc__driver__pkha.html#structltc__pkha__ecc__point__t">ltc_pkha_ecc_point_t</a> *B, const uint8_t *N, const uint8_t *R2modN, const uint8_t *aCurveParam, const uint8_t *bCurveParam, uint8_t size, <a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a> arithType, <a class="el" href="group__ltc__driver__pkha.html#structltc__pkha__ecc__point__t">ltc_pkha_ecc_point_t</a> *result)</td></tr>
<tr class="memdesc:ga4b6d46f35209f5f0743ef646273ca351"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds elliptic curve points - A + B. <a href="#ga4b6d46f35209f5f0743ef646273ca351">More...</a><br/></td></tr>
<tr class="separator:ga4b6d46f35209f5f0743ef646273ca351"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1734b20a285d8b53941986902fda13cf"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#ga1734b20a285d8b53941986902fda13cf">LTC_PKHA_ECC_PointDouble</a> (LTC_Type *base, const <a class="el" href="group__ltc__driver__pkha.html#structltc__pkha__ecc__point__t">ltc_pkha_ecc_point_t</a> *B, const uint8_t *N, const uint8_t *aCurveParam, const uint8_t *bCurveParam, uint8_t size, <a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a> arithType, <a class="el" href="group__ltc__driver__pkha.html#structltc__pkha__ecc__point__t">ltc_pkha_ecc_point_t</a> *result)</td></tr>
<tr class="memdesc:ga1734b20a285d8b53941986902fda13cf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Doubles elliptic curve points - B + B. <a href="#ga1734b20a285d8b53941986902fda13cf">More...</a><br/></td></tr>
<tr class="separator:ga1734b20a285d8b53941986902fda13cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaef779eb70f87c08c661c3e2801302ae6"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#gaef779eb70f87c08c661c3e2801302ae6">LTC_PKHA_ECC_PointMul</a> (LTC_Type *base, const <a class="el" href="group__ltc__driver__pkha.html#structltc__pkha__ecc__point__t">ltc_pkha_ecc_point_t</a> *A, const uint8_t *E, uint8_t sizeE, const uint8_t *N, const uint8_t *R2modN, const uint8_t *aCurveParam, const uint8_t *bCurveParam, uint8_t size, <a class="el" href="group__ltc__driver__pkha.html#ga1a1e15f2277e244b7e580d7ad7af413f">ltc_pkha_timing_t</a> equalTime, <a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a> arithType, <a class="el" href="group__ltc__driver__pkha.html#structltc__pkha__ecc__point__t">ltc_pkha_ecc_point_t</a> *result, bool *infinity)</td></tr>
<tr class="memdesc:gaef779eb70f87c08c661c3e2801302ae6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multiplies an elliptic curve point by a scalar - E x (A0, A1). <a href="#gaef779eb70f87c08c661c3e2801302ae6">More...</a><br/></td></tr>
<tr class="separator:gaef779eb70f87c08c661c3e2801302ae6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<hr/><h2 class="groupheader">Data Structure Documentation</h2>
<a name="structltc__pkha__ecc__point__t" id="structltc__pkha__ecc__point__t"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct ltc_pkha_ecc_point_t</td>
</tr>
</table>
</div><div class="memdoc">
<div class="textblock"></div><table class="memberdecls">
<tr><td colspan="2"><h3>Data Fields</h3></td></tr>
<tr class="memitem:a3e548db41a957bbc94e2d60c629c7478"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3e548db41a957bbc94e2d60c629c7478"></a>
uint8_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#a3e548db41a957bbc94e2d60c629c7478">X</a></td></tr>
<tr class="memdesc:a3e548db41a957bbc94e2d60c629c7478"><td class="mdescLeft">&#160;</td><td class="mdescRight">X coordinate (affine) <br/></td></tr>
<tr class="separator:a3e548db41a957bbc94e2d60c629c7478"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aedfed521edb310ef0916b9a7898be500"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aedfed521edb310ef0916b9a7898be500"></a>
uint8_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ltc__driver__pkha.html#aedfed521edb310ef0916b9a7898be500">Y</a></td></tr>
<tr class="memdesc:aedfed521edb310ef0916b9a7898be500"><td class="mdescLeft">&#160;</td><td class="mdescRight">Y coordinate (affine) <br/></td></tr>
<tr class="separator:aedfed521edb310ef0916b9a7898be500"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="ga1a1e15f2277e244b7e580d7ad7af413f"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__ltc__driver__pkha.html#ga1a1e15f2277e244b7e580d7ad7af413f">ltc_pkha_timing_t</a></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="ga8508a97598439c72c545da28868be18e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a></td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="gga8508a97598439c72c545da28868be18ea785f77826b6a2d1398ac75bab7dfa95c"></a>kLTC_PKHA_IntegerArith</em>&#160;</td><td class="fielddoc">
<p>Use integer arithmetic. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="gga8508a97598439c72c545da28868be18eafb3307389575323e97c9f2d8ed9d7599"></a>kLTC_PKHA_F2mArith</em>&#160;</td><td class="fielddoc">
<p>Use binary polynomial arithmetic. </p>
</td></tr>
</table>
</div>
</div>
<a class="anchor" id="ga4d4f275b705ffe36b9d60f32d7d27cc6"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__ltc__driver__pkha.html#ga4d4f275b705ffe36b9d60f32d7d27cc6">ltc_pkha_montgomery_form_t</a></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga22e83f89815b78214f688c26a8e6c344"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int LTC_PKHA_CompareBigNum </td>
<td>(</td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>sizeA</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>b</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>sizeB</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Compare two PKHA big numbers. Return 1 for a &gt; b, -1 for a &lt; b and 0 if they are same. PKHA big number is lsbyte first. Thus the comparison starts at msbyte which is the last member of tested arrays.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">a</td><td>First integer represented as an array of bytes, lsbyte first. </td></tr>
<tr><td class="paramname">sizeA</td><td>Size in bytes of the first integer. </td></tr>
<tr><td class="paramname">b</td><td>Second integer represented as an array of bytes, lsbyte first. </td></tr>
<tr><td class="paramname">sizeB</td><td>Size in bytes of the second integer. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>1 if a &gt; b. </dd>
<dd>
-1 if a &lt; b. </dd>
<dd>
0 if a = b. </dd></dl>
</div>
</div>
<a class="anchor" id="ga07698c3cd156c18f626aa80dbc5a52b5"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t LTC_PKHA_NormalToMontgomery </td>
<td>(</td>
<td class="paramtype">LTC_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>N</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeN</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>A</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t *&#160;</td>
<td class="paramname"><em>sizeA</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>B</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t *&#160;</td>
<td class="paramname"><em>sizeB</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>R2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t *&#160;</td>
<td class="paramname"><em>sizeR2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga1a1e15f2277e244b7e580d7ad7af413f">ltc_pkha_timing_t</a>&#160;</td>
<td class="paramname"><em>equalTime</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a>&#160;</td>
<td class="paramname"><em>arithType</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function computes R2 mod N and optionally converts A or B into Montgomery format of A or B.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">base</td><td>LTC peripheral base address </td></tr>
<tr><td class="paramdir"></td><td class="paramname">N</td><td>modulus </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeN</td><td>size of N in bytes </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">A</td><td>The first input in non-Montgomery format. Output Montgomery format of the first input. </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">sizeA</td><td>pointer to size variable. On input it holds size of input A in bytes. On output it holds size of Montgomery format of A in bytes. </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">B</td><td>Second input in non-Montgomery format. Output Montgomery format of the second input. </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">sizeB</td><td>pointer to size variable. On input it holds size of input B in bytes. On output it holds size of Montgomery format of B in bytes. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">R2</td><td>Output Montgomery factor R2 mod N. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">sizeR2</td><td>pointer to size variable. On output it holds size of Montgomery factor R2 mod N in bytes. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">equalTime</td><td>Run the function time equalized or no timing equalization. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">arithType</td><td>Type of arithmetic to perform (integer or F2m) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Operation status. </dd></dl>
</div>
</div>
<a class="anchor" id="ga958274310363008ee89beb8b779a898f"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t LTC_PKHA_MontgomeryToNormal </td>
<td>(</td>
<td class="paramtype">LTC_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>N</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeN</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>A</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t *&#160;</td>
<td class="paramname"><em>sizeA</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>B</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t *&#160;</td>
<td class="paramname"><em>sizeB</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga1a1e15f2277e244b7e580d7ad7af413f">ltc_pkha_timing_t</a>&#160;</td>
<td class="paramname"><em>equalTime</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a>&#160;</td>
<td class="paramname"><em>arithType</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function converts Montgomery format of A or B into int A or B.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">base</td><td>LTC peripheral base address </td></tr>
<tr><td class="paramdir"></td><td class="paramname">N</td><td>modulus. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeN</td><td>size of N modulus in bytes. </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">A</td><td>Input first number in Montgomery format. Output is non-Montgomery format. </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">sizeA</td><td>pointer to size variable. On input it holds size of the input A in bytes. On output it holds size of non-Montgomery A in bytes. </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">B</td><td>Input first number in Montgomery format. Output is non-Montgomery format. </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">sizeB</td><td>pointer to size variable. On input it holds size of the input B in bytes. On output it holds size of non-Montgomery B in bytes. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">equalTime</td><td>Run the function time equalized or no timing equalization. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">arithType</td><td>Type of arithmetic to perform (integer or F2m) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Operation status. </dd></dl>
</div>
</div>
<a class="anchor" id="gacee6ff900a73419aaf9d37622e5c8e67"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t LTC_PKHA_ModAdd </td>
<td>(</td>
<td class="paramtype">LTC_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>A</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeA</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>B</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeB</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>N</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeN</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>result</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t *&#160;</td>
<td class="paramname"><em>resultSize</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a>&#160;</td>
<td class="paramname"><em>arithType</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function performs modular addition of (A + B) mod N, with either integer or binary polynomial (F2m) inputs. In the F2m form, this function is equivalent to a bitwise XOR and it is functionally the same as subtraction.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">base</td><td>LTC peripheral base address </td></tr>
<tr><td class="paramdir"></td><td class="paramname">A</td><td>first addend (integer or binary polynomial) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeA</td><td>Size of A in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">B</td><td>second addend (integer or binary polynomial) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeB</td><td>Size of B in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">N</td><td>modulus. For F2m operation this can be NULL, as N is ignored during F2m polynomial addition. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeN</td><td>Size of N in bytes. This must be given for both integer and F2m polynomial additions. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">result</td><td>Output array to store result of operation </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">resultSize</td><td>Output size of operation in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">arithType</td><td>Type of arithmetic to perform (integer or F2m) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Operation status. </dd></dl>
</div>
</div>
<a class="anchor" id="ga39985cfeb0d9fd6114ae844b3cbfb20f"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t LTC_PKHA_ModSub1 </td>
<td>(</td>
<td class="paramtype">LTC_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>A</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeA</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>B</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeB</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>N</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeN</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>result</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t *&#160;</td>
<td class="paramname"><em>resultSize</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function performs modular subtraction of (A - B) mod N with integer inputs.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">base</td><td>LTC peripheral base address </td></tr>
<tr><td class="paramdir"></td><td class="paramname">A</td><td>first addend (integer or binary polynomial) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeA</td><td>Size of A in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">B</td><td>second addend (integer or binary polynomial) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeB</td><td>Size of B in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">N</td><td>modulus </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeN</td><td>Size of N in bytes </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">result</td><td>Output array to store result of operation </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">resultSize</td><td>Output size of operation in bytes </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Operation status. </dd></dl>
</div>
</div>
<a class="anchor" id="ga08a506cf934772af448bdb08012ffda9"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t LTC_PKHA_ModSub2 </td>
<td>(</td>
<td class="paramtype">LTC_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>A</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeA</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>B</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeB</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>N</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeN</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>result</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t *&#160;</td>
<td class="paramname"><em>resultSize</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function performs modular subtraction of (B - A) mod N, with integer inputs.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">base</td><td>LTC peripheral base address </td></tr>
<tr><td class="paramdir"></td><td class="paramname">A</td><td>first addend (integer or binary polynomial) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeA</td><td>Size of A in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">B</td><td>second addend (integer or binary polynomial) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeB</td><td>Size of B in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">N</td><td>modulus </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeN</td><td>Size of N in bytes </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">result</td><td>Output array to store result of operation </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">resultSize</td><td>Output size of operation in bytes </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Operation status. </dd></dl>
</div>
</div>
<a class="anchor" id="gac6c6d8bff88bf3e37e7dcebb6802aac5"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t LTC_PKHA_ModMul </td>
<td>(</td>
<td class="paramtype">LTC_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>A</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeA</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>B</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeB</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>N</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeN</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>result</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t *&#160;</td>
<td class="paramname"><em>resultSize</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a>&#160;</td>
<td class="paramname"><em>arithType</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga4d4f275b705ffe36b9d60f32d7d27cc6">ltc_pkha_montgomery_form_t</a>&#160;</td>
<td class="paramname"><em>montIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga4d4f275b705ffe36b9d60f32d7d27cc6">ltc_pkha_montgomery_form_t</a>&#160;</td>
<td class="paramname"><em>montOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga1a1e15f2277e244b7e580d7ad7af413f">ltc_pkha_timing_t</a>&#160;</td>
<td class="paramname"><em>equalTime</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function performs modular multiplication with either integer or binary polynomial (F2m) inputs. It can optionally specify whether inputs and/or outputs will be in Montgomery form or not.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">base</td><td>LTC peripheral base address </td></tr>
<tr><td class="paramdir"></td><td class="paramname">A</td><td>first addend (integer or binary polynomial) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeA</td><td>Size of A in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">B</td><td>second addend (integer or binary polynomial) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeB</td><td>Size of B in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">N</td><td>modulus. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeN</td><td>Size of N in bytes </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">result</td><td>Output array to store result of operation </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">resultSize</td><td>Output size of operation in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">arithType</td><td>Type of arithmetic to perform (integer or F2m) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">montIn</td><td>Format of inputs </td></tr>
<tr><td class="paramdir"></td><td class="paramname">montOut</td><td>Format of output </td></tr>
<tr><td class="paramdir"></td><td class="paramname">equalTime</td><td>Run the function time equalized or no timing equalization. This argument is ignored for F2m modular multiplication. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Operation status. </dd></dl>
</div>
</div>
<a class="anchor" id="ga3c62dbae643f27b19726964358c36c7f"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t LTC_PKHA_ModExp </td>
<td>(</td>
<td class="paramtype">LTC_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>A</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeA</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>N</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeN</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>E</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeE</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>result</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t *&#160;</td>
<td class="paramname"><em>resultSize</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a>&#160;</td>
<td class="paramname"><em>arithType</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga4d4f275b705ffe36b9d60f32d7d27cc6">ltc_pkha_montgomery_form_t</a>&#160;</td>
<td class="paramname"><em>montIn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga1a1e15f2277e244b7e580d7ad7af413f">ltc_pkha_timing_t</a>&#160;</td>
<td class="paramname"><em>equalTime</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function performs modular exponentiation with either integer or binary polynomial (F2m) inputs.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">base</td><td>LTC peripheral base address </td></tr>
<tr><td class="paramdir"></td><td class="paramname">A</td><td>first addend (integer or binary polynomial) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeA</td><td>Size of A in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">N</td><td>modulus </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeN</td><td>Size of N in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">E</td><td>exponent </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeE</td><td>Size of E in bytes </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">result</td><td>Output array to store result of operation </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">resultSize</td><td>Output size of operation in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">montIn</td><td>Format of A input (normal or Montgomery) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">arithType</td><td>Type of arithmetic to perform (integer or F2m) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">equalTime</td><td>Run the function time equalized or no timing equalization. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Operation status. </dd></dl>
</div>
</div>
<a class="anchor" id="ga09f40086387a472461efcc60cf6f972d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t LTC_PKHA_ModRed </td>
<td>(</td>
<td class="paramtype">LTC_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>A</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeA</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>N</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeN</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>result</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t *&#160;</td>
<td class="paramname"><em>resultSize</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a>&#160;</td>
<td class="paramname"><em>arithType</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function performs modular reduction with either integer or binary polynomial (F2m) inputs.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">base</td><td>LTC peripheral base address </td></tr>
<tr><td class="paramdir"></td><td class="paramname">A</td><td>first addend (integer or binary polynomial) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeA</td><td>Size of A in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">N</td><td>modulus </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeN</td><td>Size of N in bytes </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">result</td><td>Output array to store result of operation </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">resultSize</td><td>Output size of operation in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">arithType</td><td>Type of arithmetic to perform (integer or F2m) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Operation status. </dd></dl>
</div>
</div>
<a class="anchor" id="gab2af1166c1d55fe8e2b73816ef8f7c1e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t LTC_PKHA_ModInv </td>
<td>(</td>
<td class="paramtype">LTC_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>A</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeA</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>N</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeN</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>result</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t *&#160;</td>
<td class="paramname"><em>resultSize</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a>&#160;</td>
<td class="paramname"><em>arithType</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function performs modular inversion with either integer or binary polynomial (F2m) inputs.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">base</td><td>LTC peripheral base address </td></tr>
<tr><td class="paramdir"></td><td class="paramname">A</td><td>first addend (integer or binary polynomial) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeA</td><td>Size of A in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">N</td><td>modulus </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeN</td><td>Size of N in bytes </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">result</td><td>Output array to store result of operation </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">resultSize</td><td>Output size of operation in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">arithType</td><td>Type of arithmetic to perform (integer or F2m) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Operation status. </dd></dl>
</div>
</div>
<a class="anchor" id="ga53e0e41f5c0e4c6db46bb9b9ae3cb2a4"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t LTC_PKHA_ModR2 </td>
<td>(</td>
<td class="paramtype">LTC_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>N</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeN</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>result</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t *&#160;</td>
<td class="paramname"><em>resultSize</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a>&#160;</td>
<td class="paramname"><em>arithType</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function computes a constant to assist in converting operands into the Montgomery residue system representation.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">base</td><td>LTC peripheral base address </td></tr>
<tr><td class="paramdir"></td><td class="paramname">N</td><td>modulus </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeN</td><td>Size of N in bytes </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">result</td><td>Output array to store result of operation </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">resultSize</td><td>Output size of operation in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">arithType</td><td>Type of arithmetic to perform (integer or F2m) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Operation status. </dd></dl>
</div>
</div>
<a class="anchor" id="gaadbda56785d9749b8cf0bcba5ad61dbf"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t LTC_PKHA_GCD </td>
<td>(</td>
<td class="paramtype">LTC_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>A</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeA</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>N</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeN</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>result</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t *&#160;</td>
<td class="paramname"><em>resultSize</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a>&#160;</td>
<td class="paramname"><em>arithType</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function calculates the greatest common divisor of two inputs with either integer or binary polynomial (F2m) inputs.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">base</td><td>LTC peripheral base address </td></tr>
<tr><td class="paramdir"></td><td class="paramname">A</td><td>first value (must be smaller than or equal to N) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeA</td><td>Size of A in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">N</td><td>second value (must be non-zero) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeN</td><td>Size of N in bytes </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">result</td><td>Output array to store result of operation </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">resultSize</td><td>Output size of operation in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">arithType</td><td>Type of arithmetic to perform (integer or F2m) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Operation status. </dd></dl>
</div>
</div>
<a class="anchor" id="gae04c2c3b7d0e49c7772ab9f388057022"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t LTC_PKHA_PrimalityTest </td>
<td>(</td>
<td class="paramtype">LTC_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>A</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeA</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>B</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeB</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>N</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>sizeN</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool *&#160;</td>
<td class="paramname"><em>res</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function calculates whether or not a candidate prime number is likely to be a prime.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">base</td><td>LTC peripheral base address </td></tr>
<tr><td class="paramdir"></td><td class="paramname">A</td><td>initial random seed </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeA</td><td>Size of A in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">B</td><td>number of trial runs </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeB</td><td>Size of B in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">N</td><td>candidate prime integer </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeN</td><td>Size of N in bytes </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">res</td><td>True if the value is likely prime or false otherwise </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Operation status. </dd></dl>
</div>
</div>
<a class="anchor" id="ga4b6d46f35209f5f0743ef646273ca351"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t LTC_PKHA_ECC_PointAdd </td>
<td>(</td>
<td class="paramtype">LTC_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="group__ltc__driver__pkha.html#structltc__pkha__ecc__point__t">ltc_pkha_ecc_point_t</a> *&#160;</td>
<td class="paramname"><em>A</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="group__ltc__driver__pkha.html#structltc__pkha__ecc__point__t">ltc_pkha_ecc_point_t</a> *&#160;</td>
<td class="paramname"><em>B</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>N</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>R2modN</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>aCurveParam</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>bCurveParam</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a>&#160;</td>
<td class="paramname"><em>arithType</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#structltc__pkha__ecc__point__t">ltc_pkha_ecc_point_t</a> *&#160;</td>
<td class="paramname"><em>result</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function performs ECC point addition over a prime field (Fp) or binary field (F2m) using affine coordinates.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">base</td><td>LTC peripheral base address </td></tr>
<tr><td class="paramdir"></td><td class="paramname">A</td><td>Left-hand point </td></tr>
<tr><td class="paramdir"></td><td class="paramname">B</td><td>Right-hand point </td></tr>
<tr><td class="paramdir"></td><td class="paramname">N</td><td>Prime modulus of the field </td></tr>
<tr><td class="paramdir"></td><td class="paramname">R2modN</td><td>NULL (the function computes R2modN internally) or pointer to pre-computed R2modN (obtained from <a class="el" href="group__ltc__driver__pkha.html#ga53e0e41f5c0e4c6db46bb9b9ae3cb2a4" title="Computes integer Montgomery factor R^2 mod N. ">LTC_PKHA_ModR2()</a> function). </td></tr>
<tr><td class="paramdir"></td><td class="paramname">aCurveParam</td><td>A parameter from curve equation </td></tr>
<tr><td class="paramdir"></td><td class="paramname">bCurveParam</td><td>B parameter from curve equation (constant) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">size</td><td>Size in bytes of curve points and parameters </td></tr>
<tr><td class="paramdir"></td><td class="paramname">arithType</td><td>Type of arithmetic to perform (integer or F2m) </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">result</td><td>Result point </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Operation status. </dd></dl>
</div>
</div>
<a class="anchor" id="ga1734b20a285d8b53941986902fda13cf"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t LTC_PKHA_ECC_PointDouble </td>
<td>(</td>
<td class="paramtype">LTC_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="group__ltc__driver__pkha.html#structltc__pkha__ecc__point__t">ltc_pkha_ecc_point_t</a> *&#160;</td>
<td class="paramname"><em>B</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>N</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>aCurveParam</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>bCurveParam</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a>&#160;</td>
<td class="paramname"><em>arithType</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#structltc__pkha__ecc__point__t">ltc_pkha_ecc_point_t</a> *&#160;</td>
<td class="paramname"><em>result</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function performs ECC point doubling over a prime field (Fp) or binary field (F2m) using affine coordinates.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">base</td><td>LTC peripheral base address </td></tr>
<tr><td class="paramdir"></td><td class="paramname">B</td><td>Point to double </td></tr>
<tr><td class="paramdir"></td><td class="paramname">N</td><td>Prime modulus of the field </td></tr>
<tr><td class="paramdir"></td><td class="paramname">aCurveParam</td><td>A parameter from curve equation </td></tr>
<tr><td class="paramdir"></td><td class="paramname">bCurveParam</td><td>B parameter from curve equation (constant) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">size</td><td>Size in bytes of curve points and parameters </td></tr>
<tr><td class="paramdir"></td><td class="paramname">arithType</td><td>Type of arithmetic to perform (integer or F2m) </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">result</td><td>Result point </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Operation status. </dd></dl>
</div>
</div>
<a class="anchor" id="gaef779eb70f87c08c661c3e2801302ae6"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t LTC_PKHA_ECC_PointMul </td>
<td>(</td>
<td class="paramtype">LTC_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="group__ltc__driver__pkha.html#structltc__pkha__ecc__point__t">ltc_pkha_ecc_point_t</a> *&#160;</td>
<td class="paramname"><em>A</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>E</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>sizeE</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>N</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>R2modN</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>aCurveParam</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>bCurveParam</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga1a1e15f2277e244b7e580d7ad7af413f">ltc_pkha_timing_t</a>&#160;</td>
<td class="paramname"><em>equalTime</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#ga8508a97598439c72c545da28868be18e">ltc_pkha_f2m_t</a>&#160;</td>
<td class="paramname"><em>arithType</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__ltc__driver__pkha.html#structltc__pkha__ecc__point__t">ltc_pkha_ecc_point_t</a> *&#160;</td>
<td class="paramname"><em>result</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool *&#160;</td>
<td class="paramname"><em>infinity</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function performs ECC point multiplication to multiply an ECC point by a scalar integer multiplier over a prime field (Fp) or a binary field (F2m).</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">base</td><td>LTC peripheral base address </td></tr>
<tr><td class="paramdir"></td><td class="paramname">A</td><td>Point as multiplicand </td></tr>
<tr><td class="paramdir"></td><td class="paramname">E</td><td>Scalar multiple </td></tr>
<tr><td class="paramdir"></td><td class="paramname">sizeE</td><td>The size of E, in bytes </td></tr>
<tr><td class="paramdir"></td><td class="paramname">N</td><td>Modulus, a prime number for the Fp field or Irreducible polynomial for F2m field. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">R2modN</td><td>NULL (the function computes R2modN internally) or pointer to pre-computed R2modN (obtained from <a class="el" href="group__ltc__driver__pkha.html#ga53e0e41f5c0e4c6db46bb9b9ae3cb2a4" title="Computes integer Montgomery factor R^2 mod N. ">LTC_PKHA_ModR2()</a> function). </td></tr>
<tr><td class="paramdir"></td><td class="paramname">aCurveParam</td><td>A parameter from curve equation </td></tr>
<tr><td class="paramdir"></td><td class="paramname">bCurveParam</td><td>B parameter from curve equation (C parameter for operation over F2m). </td></tr>
<tr><td class="paramdir"></td><td class="paramname">size</td><td>Size in bytes of curve points and parameters </td></tr>
<tr><td class="paramdir"></td><td class="paramname">equalTime</td><td>Run the function time equalized or no timing equalization. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">arithType</td><td>Type of arithmetic to perform (integer or F2m) </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">result</td><td>Result point </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">infinity</td><td>Output true if the result is point of infinity, and false otherwise. Writing of this output will be ignored if the argument is NULL. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Operation status. </dd></dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.5-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul class="foot">
<li class="footer">&copy; 2016 NXP Semiconductors. All rights reserved.
</li>
</ul>
</div>
</body>
</html>