Files
KSDK_2.0_MKL03Z8xxx4/docs/Kinetis SDK API Reference Manual MKL03Z4_v2.0.0/group__mmcau.html
2016-08-09 18:02:18 +02:00

1634 lines
89 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.5"/>
<title>Kinetis SDK v.2.0 API Reference Manual: Memory-Mapped Cryptographic Acceleration Unit (MMCAU)</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">NXP Semiconductors</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.5 -->
<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__mmcau.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="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Memory-Mapped Cryptographic Acceleration Unit (MMCAU)</div> </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Overview</h2>
<p>The Kinetis mmCAU software library uses the mmCAU co-processor that is connected to the Kinetis ARM Cortex-M4/M0+ Private Peripheral Bus (PPB). In this chapter, CAU refers to both CAU and mmCAU unless explicitly noted.</p>
<h1><a class="anchor" id="MMCAUPurpose"></a>
Purpose</h1>
<p>The following chapter describes how to use the mmCAU software library in any application to integrate a cryptographic algorithm or hashing function supported by the software library. Freescale products supported by the software library are Kinetis MCU/MPUs. Check the specific Freescale product for CAU availability.</p>
<h1><a class="anchor" id="MMCAULF"></a>
Library Features</h1>
<p>The library is as compact and generic as possible to simplify the integration with existing cryptographic software. The library has a standard header file with ANSI C prototypes for all functions: "cau_api.h". This software library is thread safe only if CAU registers are saved on a context switch. The Kinetis mmCAU software library is also compatible to ARM C compiler conventions (EABI). All pointers passed to mmCAU API functions (input and output data blocks, keys, key schedules, and so on) are aligned to 0-modulo-4 addresses.<br/>
For applications that don't need to deal with the aligned addresses, a simple wrapper layer is provided. The wrapper layer consists of the "fsl_mmcau.h" header file and "fsl_mmcau.c" source code file. The only function of the wrapper layer is that it supports unaligned addresses <br/>
. The CAU library supports the following encryption/decryption algorithms and hashing functions: </p>
<ul>
<li>
AES128 </li>
<li>
AES192 </li>
<li>
AES256 </li>
<li>
DES </li>
<li>
MD5 </li>
<li>
SHA1 </li>
<li>
SHA256 </li>
</ul>
<p><b>Note:</b> 3DES crypto algorithms are supported by calling the corresponding DES crypto function three times. Hardware support for SHA256 is only present in the CAU version 2. See the appropriate MCU/MPU reference manual for details about availability. Additionally, the <a class="el" href="group__mmcau.html#ga3eaeb3afd68b505b385e5e6a2f23b9b3" title="SHA256: Initializes the SHA256 state variables. ">cau_sha256_initialize_output()</a> function checks the hardware revision and returns a (-1) value if the CAU lacks SHA256 support.</p>
<h1><a class="anchor" id="MMCAUSLO"></a>
CAU and mmCAU software library overview</h1>
<p>Table 1 shows the crypto algorithms and hashing functions included in the software library: </p>
<table class="doxtable">
<tr>
<td width="120" rowspan="6"><b>Crypto Algorithms</b> </td><td width="90" rowspan="3">AES128<br/>
AES192<br/>
AES256 </td><td>cau_aes_set_key </td></tr>
<tr>
<td width="160">cau_aes_encrypt </td></tr>
<tr>
<td width="160">cau_aes_decrypt </td></tr>
<tr>
<td rowspan="3">DES/3DES </td><td width="160">cau_des_chk_parity </td></tr>
<tr>
<td width="160">cau_des_encrypt </td></tr>
<tr>
<td width="160">cau_des_decrypt </td></tr>
<tr>
<td rowspan="12"><b>Hashing Functions</b> </td><td rowspan="4">MD5 </td><td width="160">cau_md5_initialize_output </td></tr>
<tr>
<td width="160">cau_md5_hash_n </td></tr>
<tr>
<td width="160">cau_md5_update </td></tr>
<tr>
<td width="160">cau_md5_hash </td></tr>
<tr>
<td rowspan="4">SHA1 </td><td width="160">cau_sha1_initialize_output </td></tr>
<tr>
<td width="160">cau_sha1_hash_n </td></tr>
<tr>
<td width="160">cau_sha1_update </td></tr>
<tr>
<td width="160">cau_sha1_hash </td></tr>
<tr>
<td rowspan="4">SHA256 </td><td width="160">cau_sha256_initialize_output </td></tr>
<tr>
<td width="160">cau_sha256_hash_n </td></tr>
<tr>
<td width="160">cau_sha256_update </td></tr>
<tr>
<td width="160">cau_sha256_hash </td></tr>
</table>
<p><b><em>Table 1: Library Overview</em></b></p>
<h1><a class="anchor" id="MMCAUSLU"></a>
mmCAU software library usage</h1>
<p>The software library contains the following files: </p>
<table class="doxtable">
<tr>
<td><b>File</b> </td><td><b>Description</b> </td></tr>
<tr>
<td>cau_api.h </td><td>CAU and mmCAU header file </td></tr>
<tr>
<td>lib_mmcau.a </td><td>mmCAU library: Kinetis </td></tr>
</table>
<p><b><em>Table 2: File Description</em></b> </p>
<p>The header file and lib_mmcau.a must always be included in the project. </p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gaf2a348d9e0eb2c92deddfadffbcf1044"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#gaf2a348d9e0eb2c92deddfadffbcf1044">cau_aes_set_key</a> (const unsigned char *key, const int key_size, unsigned char *key_sch)</td></tr>
<tr class="memdesc:gaf2a348d9e0eb2c92deddfadffbcf1044"><td class="mdescLeft">&#160;</td><td class="mdescRight">AES: Performs an AES key expansion. <a href="#gaf2a348d9e0eb2c92deddfadffbcf1044">More...</a><br/></td></tr>
<tr class="separator:gaf2a348d9e0eb2c92deddfadffbcf1044"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab12b6dbcd3c82a584475fa420cc9edda"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#gab12b6dbcd3c82a584475fa420cc9edda">cau_aes_encrypt</a> (const unsigned char *in, const unsigned char *key_sch, const int nr, unsigned char *out)</td></tr>
<tr class="memdesc:gab12b6dbcd3c82a584475fa420cc9edda"><td class="mdescLeft">&#160;</td><td class="mdescRight">AES: Encrypts a single 16 byte block. <a href="#gab12b6dbcd3c82a584475fa420cc9edda">More...</a><br/></td></tr>
<tr class="separator:gab12b6dbcd3c82a584475fa420cc9edda"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga38dc3b0ebbc733abb824269e3520d5a2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga38dc3b0ebbc733abb824269e3520d5a2">cau_aes_decrypt</a> (const unsigned char *in, const unsigned char *key_sch, const int nr, unsigned char *out)</td></tr>
<tr class="memdesc:ga38dc3b0ebbc733abb824269e3520d5a2"><td class="mdescLeft">&#160;</td><td class="mdescRight">AES: Decrypts a single 16-byte block. <a href="#ga38dc3b0ebbc733abb824269e3520d5a2">More...</a><br/></td></tr>
<tr class="separator:ga38dc3b0ebbc733abb824269e3520d5a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad276724f27592434094f277dea1adb4a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#gad276724f27592434094f277dea1adb4a">cau_des_chk_parity</a> (const unsigned char *key)</td></tr>
<tr class="memdesc:gad276724f27592434094f277dea1adb4a"><td class="mdescLeft">&#160;</td><td class="mdescRight">DES: Checks key parity. <a href="#gad276724f27592434094f277dea1adb4a">More...</a><br/></td></tr>
<tr class="separator:gad276724f27592434094f277dea1adb4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga57dae10b8d6d81537fd137d66115db37"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga57dae10b8d6d81537fd137d66115db37">cau_des_encrypt</a> (const unsigned char *in, const unsigned char *key, unsigned char *out)</td></tr>
<tr class="memdesc:ga57dae10b8d6d81537fd137d66115db37"><td class="mdescLeft">&#160;</td><td class="mdescRight">DES: Encrypts a single 8-byte block. <a href="#ga57dae10b8d6d81537fd137d66115db37">More...</a><br/></td></tr>
<tr class="separator:ga57dae10b8d6d81537fd137d66115db37"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6445deb67c61ce2ce97a9a20272a79ab"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga6445deb67c61ce2ce97a9a20272a79ab">cau_des_decrypt</a> (const unsigned char *in, const unsigned char *key, unsigned char *out)</td></tr>
<tr class="memdesc:ga6445deb67c61ce2ce97a9a20272a79ab"><td class="mdescLeft">&#160;</td><td class="mdescRight">DES: Decrypts a single 8-byte block. <a href="#ga6445deb67c61ce2ce97a9a20272a79ab">More...</a><br/></td></tr>
<tr class="separator:ga6445deb67c61ce2ce97a9a20272a79ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5a9fc801b5941fce129f8ccaec9afe5d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga5a9fc801b5941fce129f8ccaec9afe5d">cau_md5_initialize_output</a> (const unsigned char *md5_state)</td></tr>
<tr class="memdesc:ga5a9fc801b5941fce129f8ccaec9afe5d"><td class="mdescLeft">&#160;</td><td class="mdescRight">MD5: Initializes the MD5 state variables. <a href="#ga5a9fc801b5941fce129f8ccaec9afe5d">More...</a><br/></td></tr>
<tr class="separator:ga5a9fc801b5941fce129f8ccaec9afe5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4eb301978ef0351f969594192eaa0e0b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga4eb301978ef0351f969594192eaa0e0b">cau_md5_hash_n</a> (const unsigned char *msg_data, const int num_blks, unsigned char *md5_state)</td></tr>
<tr class="memdesc:ga4eb301978ef0351f969594192eaa0e0b"><td class="mdescLeft">&#160;</td><td class="mdescRight">MD5: Updates MD5 state variables with n message blocks. <a href="#ga4eb301978ef0351f969594192eaa0e0b">More...</a><br/></td></tr>
<tr class="separator:ga4eb301978ef0351f969594192eaa0e0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5018e5becfea62e360f97f37d92eb675"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga5018e5becfea62e360f97f37d92eb675">cau_md5_update</a> (const unsigned char *msg_data, const int num_blks, unsigned char *md5_state)</td></tr>
<tr class="memdesc:ga5018e5becfea62e360f97f37d92eb675"><td class="mdescLeft">&#160;</td><td class="mdescRight">MD5: Updates MD5 state variables. <a href="#ga5018e5becfea62e360f97f37d92eb675">More...</a><br/></td></tr>
<tr class="separator:ga5018e5becfea62e360f97f37d92eb675"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6069337e06e5ce38ca90dff5dee80a7d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga6069337e06e5ce38ca90dff5dee80a7d">cau_md5_hash</a> (const unsigned char *msg_data, unsigned char *md5_state)</td></tr>
<tr class="memdesc:ga6069337e06e5ce38ca90dff5dee80a7d"><td class="mdescLeft">&#160;</td><td class="mdescRight">MD5: Updates MD5 state variables with one message block. <a href="#ga6069337e06e5ce38ca90dff5dee80a7d">More...</a><br/></td></tr>
<tr class="separator:ga6069337e06e5ce38ca90dff5dee80a7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1e0b2bb3ccf6d877ed70ddff9e696d34"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga1e0b2bb3ccf6d877ed70ddff9e696d34">cau_sha1_initialize_output</a> (const unsigned int *sha1_state)</td></tr>
<tr class="memdesc:ga1e0b2bb3ccf6d877ed70ddff9e696d34"><td class="mdescLeft">&#160;</td><td class="mdescRight">SHA1: Initializes the SHA1 state variables. <a href="#ga1e0b2bb3ccf6d877ed70ddff9e696d34">More...</a><br/></td></tr>
<tr class="separator:ga1e0b2bb3ccf6d877ed70ddff9e696d34"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaaffcb06207377fe5d8fe4cb13845e7cb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#gaaffcb06207377fe5d8fe4cb13845e7cb">cau_sha1_hash_n</a> (const unsigned char *msg_data, const int num_blks, unsigned int *sha1_state)</td></tr>
<tr class="memdesc:gaaffcb06207377fe5d8fe4cb13845e7cb"><td class="mdescLeft">&#160;</td><td class="mdescRight">SHA1: Updates SHA1 state variables with n message blocks. <a href="#gaaffcb06207377fe5d8fe4cb13845e7cb">More...</a><br/></td></tr>
<tr class="separator:gaaffcb06207377fe5d8fe4cb13845e7cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9cb303fe36aeffd2820914a9d94be0f2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga9cb303fe36aeffd2820914a9d94be0f2">cau_sha1_update</a> (const unsigned char *msg_data, const int num_blks, unsigned int *sha1_state)</td></tr>
<tr class="memdesc:ga9cb303fe36aeffd2820914a9d94be0f2"><td class="mdescLeft">&#160;</td><td class="mdescRight">SHA1: Updates SHA1 state variables. <a href="#ga9cb303fe36aeffd2820914a9d94be0f2">More...</a><br/></td></tr>
<tr class="separator:ga9cb303fe36aeffd2820914a9d94be0f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac90a1001c211f75dfea808885d8f8ec6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#gac90a1001c211f75dfea808885d8f8ec6">cau_sha1_hash</a> (const unsigned char *msg_data, unsigned int *sha1_state)</td></tr>
<tr class="memdesc:gac90a1001c211f75dfea808885d8f8ec6"><td class="mdescLeft">&#160;</td><td class="mdescRight">SHA1: Updates SHA1 state variables with one message block. <a href="#gac90a1001c211f75dfea808885d8f8ec6">More...</a><br/></td></tr>
<tr class="separator:gac90a1001c211f75dfea808885d8f8ec6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3eaeb3afd68b505b385e5e6a2f23b9b3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga3eaeb3afd68b505b385e5e6a2f23b9b3">cau_sha256_initialize_output</a> (const unsigned int *output)</td></tr>
<tr class="memdesc:ga3eaeb3afd68b505b385e5e6a2f23b9b3"><td class="mdescLeft">&#160;</td><td class="mdescRight">SHA256: Initializes the SHA256 state variables. <a href="#ga3eaeb3afd68b505b385e5e6a2f23b9b3">More...</a><br/></td></tr>
<tr class="separator:ga3eaeb3afd68b505b385e5e6a2f23b9b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga71eebbc5acd8fd66b88456ea57b1deb7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga71eebbc5acd8fd66b88456ea57b1deb7">cau_sha256_hash_n</a> (const unsigned char *input, const int num_blks, unsigned int *output)</td></tr>
<tr class="memdesc:ga71eebbc5acd8fd66b88456ea57b1deb7"><td class="mdescLeft">&#160;</td><td class="mdescRight">SHA256: Updates SHA256 state variables with n message blocks. <a href="#ga71eebbc5acd8fd66b88456ea57b1deb7">More...</a><br/></td></tr>
<tr class="separator:ga71eebbc5acd8fd66b88456ea57b1deb7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga74b24a61da611bd46d2b961a4e2ac457"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga74b24a61da611bd46d2b961a4e2ac457">cau_sha256_update</a> (const unsigned char *input, const int num_blks, unsigned int *output)</td></tr>
<tr class="memdesc:ga74b24a61da611bd46d2b961a4e2ac457"><td class="mdescLeft">&#160;</td><td class="mdescRight">SHA256: Updates SHA256 state variables. <a href="#ga74b24a61da611bd46d2b961a4e2ac457">More...</a><br/></td></tr>
<tr class="separator:ga74b24a61da611bd46d2b961a4e2ac457"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae5df61c63c55e70d9d3c3e272accff3e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#gae5df61c63c55e70d9d3c3e272accff3e">cau_sha256_hash</a> (const unsigned char *input, unsigned int *output)</td></tr>
<tr class="memdesc:gae5df61c63c55e70d9d3c3e272accff3e"><td class="mdescLeft">&#160;</td><td class="mdescRight">SHA256: Updates SHA256 state variables with one message block. <a href="#gae5df61c63c55e70d9d3c3e272accff3e">More...</a><br/></td></tr>
<tr class="separator:gae5df61c63c55e70d9d3c3e272accff3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8ba5ac242df1ad4db302f351842d1401"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga8ba5ac242df1ad4db302f351842d1401">MMCAU_AES_SetKey</a> (const uint8_t *key, const size_t keySize, uint8_t *keySch)</td></tr>
<tr class="memdesc:ga8ba5ac242df1ad4db302f351842d1401"><td class="mdescLeft">&#160;</td><td class="mdescRight">AES: Performs an AES key expansion. <a href="#ga8ba5ac242df1ad4db302f351842d1401">More...</a><br/></td></tr>
<tr class="separator:ga8ba5ac242df1ad4db302f351842d1401"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaacbf9ed061d91621e2139f17e63a42c4"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#gaacbf9ed061d91621e2139f17e63a42c4">MMCAU_AES_EncryptEcb</a> (const uint8_t *in, const uint8_t *keySch, uint32_t aesRounds, uint8_t *out)</td></tr>
<tr class="memdesc:gaacbf9ed061d91621e2139f17e63a42c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">AES: Encrypts a single 16 byte block. <a href="#gaacbf9ed061d91621e2139f17e63a42c4">More...</a><br/></td></tr>
<tr class="separator:gaacbf9ed061d91621e2139f17e63a42c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga53c2e39bd241d014c02954a0c5727ab3"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga53c2e39bd241d014c02954a0c5727ab3">MMCAU_AES_DecryptEcb</a> (const uint8_t *in, const uint8_t *keySch, uint32_t aesRounds, uint8_t *out)</td></tr>
<tr class="memdesc:ga53c2e39bd241d014c02954a0c5727ab3"><td class="mdescLeft">&#160;</td><td class="mdescRight">AES: Decrypts a single 16-byte block. <a href="#ga53c2e39bd241d014c02954a0c5727ab3">More...</a><br/></td></tr>
<tr class="separator:ga53c2e39bd241d014c02954a0c5727ab3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabe714ea9bb3460e3835fed95060bb372"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#gabe714ea9bb3460e3835fed95060bb372">MMCAU_DES_ChkParity</a> (const uint8_t *key)</td></tr>
<tr class="memdesc:gabe714ea9bb3460e3835fed95060bb372"><td class="mdescLeft">&#160;</td><td class="mdescRight">DES: Checks the key parity. <a href="#gabe714ea9bb3460e3835fed95060bb372">More...</a><br/></td></tr>
<tr class="separator:gabe714ea9bb3460e3835fed95060bb372"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga17cd0dad2ac42b719818d4c3da03b7b2"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga17cd0dad2ac42b719818d4c3da03b7b2">MMCAU_DES_EncryptEcb</a> (const uint8_t *in, const uint8_t *key, uint8_t *out)</td></tr>
<tr class="memdesc:ga17cd0dad2ac42b719818d4c3da03b7b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">DES: Encrypts a single 8-byte block. <a href="#ga17cd0dad2ac42b719818d4c3da03b7b2">More...</a><br/></td></tr>
<tr class="separator:ga17cd0dad2ac42b719818d4c3da03b7b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga45e8273fcf3d862bdcc4946bca8c895a"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga45e8273fcf3d862bdcc4946bca8c895a">MMCAU_DES_DecryptEcb</a> (const uint8_t *in, const uint8_t *key, uint8_t *out)</td></tr>
<tr class="memdesc:ga45e8273fcf3d862bdcc4946bca8c895a"><td class="mdescLeft">&#160;</td><td class="mdescRight">DES: Decrypts a single 8-byte block. <a href="#ga45e8273fcf3d862bdcc4946bca8c895a">More...</a><br/></td></tr>
<tr class="separator:ga45e8273fcf3d862bdcc4946bca8c895a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab7eb1238c89407b9f64ec9bcd55a2d02"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#gab7eb1238c89407b9f64ec9bcd55a2d02">MMCAU_MD5_InitializeOutput</a> (uint32_t *md5State)</td></tr>
<tr class="memdesc:gab7eb1238c89407b9f64ec9bcd55a2d02"><td class="mdescLeft">&#160;</td><td class="mdescRight">MD5: Initializes the MD5 state variables. <a href="#gab7eb1238c89407b9f64ec9bcd55a2d02">More...</a><br/></td></tr>
<tr class="separator:gab7eb1238c89407b9f64ec9bcd55a2d02"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga64afcbb15fffb8fc5ded30fe2c8e4b86"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga64afcbb15fffb8fc5ded30fe2c8e4b86">MMCAU_MD5_HashN</a> (const uint8_t *msgData, uint32_t numBlocks, uint32_t *md5State)</td></tr>
<tr class="memdesc:ga64afcbb15fffb8fc5ded30fe2c8e4b86"><td class="mdescLeft">&#160;</td><td class="mdescRight">MD5: Updates the MD5 state variables with n message blocks. <a href="#ga64afcbb15fffb8fc5ded30fe2c8e4b86">More...</a><br/></td></tr>
<tr class="separator:ga64afcbb15fffb8fc5ded30fe2c8e4b86"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga08f0509d34e5d3846c3166f44d15acda"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga08f0509d34e5d3846c3166f44d15acda">MMCAU_MD5_Update</a> (const uint8_t *msgData, uint32_t numBlocks, uint32_t *md5State)</td></tr>
<tr class="memdesc:ga08f0509d34e5d3846c3166f44d15acda"><td class="mdescLeft">&#160;</td><td class="mdescRight">MD5: Updates the MD5 state variables. <a href="#ga08f0509d34e5d3846c3166f44d15acda">More...</a><br/></td></tr>
<tr class="separator:ga08f0509d34e5d3846c3166f44d15acda"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac0d57148b031f25f9ed1282d8d41e2ee"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#gac0d57148b031f25f9ed1282d8d41e2ee">MMCAU_SHA1_InitializeOutput</a> (uint32_t *sha1State)</td></tr>
<tr class="memdesc:gac0d57148b031f25f9ed1282d8d41e2ee"><td class="mdescLeft">&#160;</td><td class="mdescRight">SHA1: Initializes the SHA1 state variables. <a href="#gac0d57148b031f25f9ed1282d8d41e2ee">More...</a><br/></td></tr>
<tr class="separator:gac0d57148b031f25f9ed1282d8d41e2ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1b050689e4e566909255e4f95573735a"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga1b050689e4e566909255e4f95573735a">MMCAU_SHA1_HashN</a> (const uint8_t *msgData, uint32_t numBlocks, uint32_t *sha1State)</td></tr>
<tr class="memdesc:ga1b050689e4e566909255e4f95573735a"><td class="mdescLeft">&#160;</td><td class="mdescRight">SHA1: Updates the SHA1 state variables with n message blocks. <a href="#ga1b050689e4e566909255e4f95573735a">More...</a><br/></td></tr>
<tr class="separator:ga1b050689e4e566909255e4f95573735a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1b25041a7b79e8b545262c6ad5473a52"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga1b25041a7b79e8b545262c6ad5473a52">MMCAU_SHA1_Update</a> (const uint8_t *msgData, uint32_t numBlocks, uint32_t *sha1State)</td></tr>
<tr class="memdesc:ga1b25041a7b79e8b545262c6ad5473a52"><td class="mdescLeft">&#160;</td><td class="mdescRight">SHA1: Updates the SHA1 state variables. <a href="#ga1b25041a7b79e8b545262c6ad5473a52">More...</a><br/></td></tr>
<tr class="separator:ga1b25041a7b79e8b545262c6ad5473a52"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga58836d2e9cc5c7296e2ec06af8af2677"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga58836d2e9cc5c7296e2ec06af8af2677">MMCAU_SHA256_InitializeOutput</a> (uint32_t *sha256State)</td></tr>
<tr class="memdesc:ga58836d2e9cc5c7296e2ec06af8af2677"><td class="mdescLeft">&#160;</td><td class="mdescRight">SHA256: Initializes the SHA256 state variables. <a href="#ga58836d2e9cc5c7296e2ec06af8af2677">More...</a><br/></td></tr>
<tr class="separator:ga58836d2e9cc5c7296e2ec06af8af2677"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga67c9bc0952e2c34a0e2ebf309d530e5b"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#ga67c9bc0952e2c34a0e2ebf309d530e5b">MMCAU_SHA256_HashN</a> (const uint8_t *input, uint32_t numBlocks, uint32_t *sha256State)</td></tr>
<tr class="memdesc:ga67c9bc0952e2c34a0e2ebf309d530e5b"><td class="mdescLeft">&#160;</td><td class="mdescRight">SHA256: Updates the SHA256 state variables with n message blocks. <a href="#ga67c9bc0952e2c34a0e2ebf309d530e5b">More...</a><br/></td></tr>
<tr class="separator:ga67c9bc0952e2c34a0e2ebf309d530e5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf9208c4f59492a9d5a0fbd256dbeb7f8"><td class="memItemLeft" align="right" valign="top">status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmcau.html#gaf9208c4f59492a9d5a0fbd256dbeb7f8">MMCAU_SHA256_Update</a> (const uint8_t *input, uint32_t numBlocks, uint32_t *sha256State)</td></tr>
<tr class="memdesc:gaf9208c4f59492a9d5a0fbd256dbeb7f8"><td class="mdescLeft">&#160;</td><td class="mdescRight">SHA256: Updates SHA256 state variables. <a href="#gaf9208c4f59492a9d5a0fbd256dbeb7f8">More...</a><br/></td></tr>
<tr class="separator:gaf9208c4f59492a9d5a0fbd256dbeb7f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gaf2a348d9e0eb2c92deddfadffbcf1044"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void cau_aes_set_key </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>key</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int&#160;</td>
<td class="paramname"><em>key_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>key_sch</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function performs an AES key expansion</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">key</td><td>Pointer to input key (128, 192, 256 bits in length). </td></tr>
<tr><td class="paramdir"></td><td class="paramname">key_size</td><td>Key size in bits (128, 192, 256) </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">key_sch</td><td>Pointer to key schedule output (44, 52, 60 longwords) </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>All pointers must have word (4 bytes) alignment </dd>
<dd>
Table below shows the requirements for the <a class="el" href="group__mmcau.html#gaf2a348d9e0eb2c92deddfadffbcf1044" title="AES: Performs an AES key expansion. ">cau_aes_set_key()</a> function when using AES128, AES192 or AES256.<br/>
| [in] Key Size (bits) | [out] Key Schedule Size (32 bit data values) |<br/>
| :------------------&mdash;: | :-----------------------------------------&mdash;: |<br/>
| 128 | 44 |<br/>
| 192 | 52 |<br/>
| 256 | 60 | </dd></dl>
</div>
</div>
<a class="anchor" id="gab12b6dbcd3c82a584475fa420cc9edda"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void cau_aes_encrypt </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>key_sch</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int&#160;</td>
<td class="paramname"><em>nr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>out</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function encrypts a single 16-byte block for AES128, AES192 and AES256</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">in</td><td>Pointer to 16-byte block of input plaintext </td></tr>
<tr><td class="paramdir"></td><td class="paramname">key_sch</td><td>Pointer to key schedule (44, 52, 60 longwords) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">nr</td><td>Number of AES rounds (10, 12, 14 = f(key_schedule)) </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>Pointer to 16-byte block of output ciphertext </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>All pointers must have word (4 bytes) alignment </dd>
<dd>
Input and output blocks may overlap.<br/>
Table below shows the requirements for the <a class="el" href="group__mmcau.html#gab12b6dbcd3c82a584475fa420cc9edda" title="AES: Encrypts a single 16 byte block. ">cau_aes_encrypt()</a>/cau_aes_decrypt() function when using AES128, AES192 or AES256.<br/>
| Block Cipher | [in] Key Schedule Size (longwords) | [in] Number of AES rounds |<br/>
| :-------&mdash;: | :-----------------------------&mdash;: | :--------------------&mdash;: |<br/>
| AES128 | 44 | 10 |<br/>
| AES192 | 52 | 12 |<br/>
| AES256 | 60 | 14 | </dd></dl>
</div>
</div>
<a class="anchor" id="ga38dc3b0ebbc733abb824269e3520d5a2"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void cau_aes_decrypt </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>key_sch</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int&#160;</td>
<td class="paramname"><em>nr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>out</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function decrypts a single 16-byte block for AES128, AES192 and AES256</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">in</td><td>Pointer to 16-byte block of input ciphertext </td></tr>
<tr><td class="paramdir"></td><td class="paramname">key_sch</td><td>Pointer to key schedule (44, 52, 60 longwords) </td></tr>
<tr><td class="paramdir"></td><td class="paramname">nr</td><td>Number of AES rounds (10, 12, 14 = f(key_schedule)) </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>Pointer to 16-byte block of output plaintext </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>All pointers must have word (4 bytes) alignment </dd>
<dd>
Input and output blocks may overlap.<br/>
Table below shows the requirements for the <a class="el" href="group__mmcau.html#gab12b6dbcd3c82a584475fa420cc9edda" title="AES: Encrypts a single 16 byte block. ">cau_aes_encrypt()</a>/cau_aes_decrypt() function when using AES128, AES192 or AES256.<br/>
| Block Cipher | [in] Key Schedule Size (longwords) | [in] Number of AES rounds |<br/>
| :-------&mdash;: | :-----------------------------&mdash;: | :--------------------&mdash;: |<br/>
| AES128 | 44 | 10 |<br/>
| AES192 | 52 | 12 |<br/>
| AES256 | 60 | 14 | </dd></dl>
</div>
</div>
<a class="anchor" id="gad276724f27592434094f277dea1adb4a"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int cau_des_chk_parity </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>key</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function checks the parity of a DES key</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">key</td><td>64-bit DES key with parity bits. Must have word (4 bytes) alignment. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 no error </dd>
<dd>
-1 parity error </dd></dl>
</div>
</div>
<a class="anchor" id="ga57dae10b8d6d81537fd137d66115db37"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void cau_des_encrypt </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>key</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>out</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function encrypts a single 8-byte block with DES algorithm.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">in</td><td>Pointer to 8-byte block of input plaintext </td></tr>
<tr><td class="paramdir"></td><td class="paramname">key</td><td>Pointer to 64-bit DES key with parity bits </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>Pointer to 8-byte block of output ciphertext </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>All pointers must have word (4 bytes) alignment </dd>
<dd>
Input and output blocks may overlap. </dd></dl>
</div>
</div>
<a class="anchor" id="ga6445deb67c61ce2ce97a9a20272a79ab"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void cau_des_decrypt </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>key</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>out</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function decrypts a single 8-byte block with DES algorithm.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">in</td><td>Pointer to 8-byte block of input ciphertext </td></tr>
<tr><td class="paramdir"></td><td class="paramname">key</td><td>Pointer to 64-bit DES key with parity bits </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>Pointer to 8-byte block of output plaintext </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>All pointers must have word (4 bytes) alignment </dd>
<dd>
Input and output blocks may overlap. </dd></dl>
</div>
</div>
<a class="anchor" id="ga5a9fc801b5941fce129f8ccaec9afe5d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void cau_md5_initialize_output </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>md5_state</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function initializes the MD5 state variables. The output can be used as input to <a class="el" href="group__mmcau.html#ga6069337e06e5ce38ca90dff5dee80a7d" title="MD5: Updates MD5 state variables with one message block. ">cau_md5_hash()</a> and <a class="el" href="group__mmcau.html#ga4eb301978ef0351f969594192eaa0e0b" title="MD5: Updates MD5 state variables with n message blocks. ">cau_md5_hash_n()</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">md5_state</td><td>Pointer to 128-bit block of md5 state variables: a,b,c,d </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>All pointers must have word (4 bytes) alignment </dd></dl>
</div>
</div>
<a class="anchor" id="ga4eb301978ef0351f969594192eaa0e0b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void cau_md5_hash_n </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>msg_data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int&#160;</td>
<td class="paramname"><em>num_blks</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>md5_state</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function updates MD5 state variables for one or more input message blocks</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">msg_data</td><td>Pointer to start of input message data </td></tr>
<tr><td class="paramdir"></td><td class="paramname">num_blks</td><td>Number of 512-bit blocks to process </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">md5_state</td><td>Pointer to 128-bit block of MD5 state variables: a,b,c,d </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>All pointers must have word (4 bytes) alignment </dd>
<dd>
Input message and digest output blocks must not overlap. The <a class="el" href="group__mmcau.html#ga5a9fc801b5941fce129f8ccaec9afe5d" title="MD5: Initializes the MD5 state variables. ">cau_md5_initialize_output()</a> function must be called when starting a new hash. Useful when handling non-contiguous input message blocks. </dd></dl>
</div>
</div>
<a class="anchor" id="ga5018e5becfea62e360f97f37d92eb675"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void cau_md5_update </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>msg_data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int&#160;</td>
<td class="paramname"><em>num_blks</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>md5_state</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function updates MD5 state variables for one or more input message blocks. It starts a new hash as it internally calls <a class="el" href="group__mmcau.html#ga5a9fc801b5941fce129f8ccaec9afe5d" title="MD5: Initializes the MD5 state variables. ">cau_md5_initialize_output()</a> first.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">msg_data</td><td>Pointer to start of input message data </td></tr>
<tr><td class="paramdir"></td><td class="paramname">num_blks</td><td>Number of 512-bit blocks to process </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">md5_state</td><td>Pointer to 128-bit block of MD5 state variables: a,b,c,d </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>All pointers must have word (4 bytes) alignment </dd>
<dd>
Input message and digest output blocks must not overlap. The <a class="el" href="group__mmcau.html#ga5a9fc801b5941fce129f8ccaec9afe5d" title="MD5: Initializes the MD5 state variables. ">cau_md5_initialize_output()</a> function is not required to be called as it is called internally to start a new hash. All input message blocks must be contiguous. </dd></dl>
</div>
</div>
<a class="anchor" id="ga6069337e06e5ce38ca90dff5dee80a7d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void cau_md5_hash </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>msg_data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char *&#160;</td>
<td class="paramname"><em>md5_state</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function updates MD5 state variables for one input message block</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">msg_data</td><td>Pointer to start of 512-bits of input message data </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">md5_state</td><td>Pointer to 128-bit block of MD5 state variables: a,b,c,d </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>All pointers must have word (4 bytes) alignment </dd>
<dd>
Input message and digest output blocks must not overlap. The <a class="el" href="group__mmcau.html#ga5a9fc801b5941fce129f8ccaec9afe5d" title="MD5: Initializes the MD5 state variables. ">cau_md5_initialize_output()</a> function must be called when starting a new hash. </dd></dl>
</div>
</div>
<a class="anchor" id="ga1e0b2bb3ccf6d877ed70ddff9e696d34"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void cau_sha1_initialize_output </td>
<td>(</td>
<td class="paramtype">const unsigned int *&#160;</td>
<td class="paramname"><em>sha1_state</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function initializes the SHA1 state variables. The output can be used as input to <a class="el" href="group__mmcau.html#gac90a1001c211f75dfea808885d8f8ec6" title="SHA1: Updates SHA1 state variables with one message block. ">cau_sha1_hash()</a> and <a class="el" href="group__mmcau.html#gaaffcb06207377fe5d8fe4cb13845e7cb" title="SHA1: Updates SHA1 state variables with n message blocks. ">cau_sha1_hash_n()</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">sha1_state</td><td>Pointer to 160-bit block of SHA1 state variables: a,b,c,d,e </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>All pointers must have word (4 bytes) alignment </dd></dl>
</div>
</div>
<a class="anchor" id="gaaffcb06207377fe5d8fe4cb13845e7cb"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void cau_sha1_hash_n </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>msg_data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int&#160;</td>
<td class="paramname"><em>num_blks</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int *&#160;</td>
<td class="paramname"><em>sha1_state</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function updates SHA1 state variables for one or more input message blocks</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">msg_data</td><td>Pointer to start of input message data </td></tr>
<tr><td class="paramdir"></td><td class="paramname">num_blks</td><td>Number of 512-bit blocks to process </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">sha1_state</td><td>Pointer to 160-bit block of SHA1 state variables: a,b,c,d,e </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>All pointers must have word (4 bytes) alignment </dd>
<dd>
Input message and digest output blocks must not overlap. The <a class="el" href="group__mmcau.html#ga1e0b2bb3ccf6d877ed70ddff9e696d34" title="SHA1: Initializes the SHA1 state variables. ">cau_sha1_initialize_output()</a> function must be called when starting a new hash. Useful when handling non-contiguous input message blocks. </dd></dl>
</div>
</div>
<a class="anchor" id="ga9cb303fe36aeffd2820914a9d94be0f2"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void cau_sha1_update </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>msg_data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int&#160;</td>
<td class="paramname"><em>num_blks</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int *&#160;</td>
<td class="paramname"><em>sha1_state</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function updates SHA1 state variables for one or more input message blocks. It starts a new hash as it internally calls <a class="el" href="group__mmcau.html#ga1e0b2bb3ccf6d877ed70ddff9e696d34" title="SHA1: Initializes the SHA1 state variables. ">cau_sha1_initialize_output()</a> first.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">msg_data</td><td>Pointer to start of input message data </td></tr>
<tr><td class="paramdir"></td><td class="paramname">num_blks</td><td>Number of 512-bit blocks to process </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">sha1_state</td><td>Pointer to 160-bit block of SHA1 state variables: a,b,c,d,e </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>All pointers must have word (4 bytes) alignment </dd>
<dd>
Input message and digest output blocks must not overlap. The <a class="el" href="group__mmcau.html#ga1e0b2bb3ccf6d877ed70ddff9e696d34" title="SHA1: Initializes the SHA1 state variables. ">cau_sha1_initialize_output()</a> function is not required to be called as it is called internally to start a new hash. All input message blocks must be contiguous. </dd></dl>
</div>
</div>
<a class="anchor" id="gac90a1001c211f75dfea808885d8f8ec6"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void cau_sha1_hash </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>msg_data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int *&#160;</td>
<td class="paramname"><em>sha1_state</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function updates SHA1 state variables for one input message block</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">msg_data</td><td>Pointer to start of 512-bits of input message data </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">sha1_state</td><td>Pointer to 160-bit block of SHA1 state variables: a,b,c,d,e </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>All pointers must have word (4 bytes) alignment </dd>
<dd>
Input message and digest output blocks must not overlap. The <a class="el" href="group__mmcau.html#ga1e0b2bb3ccf6d877ed70ddff9e696d34" title="SHA1: Initializes the SHA1 state variables. ">cau_sha1_initialize_output()</a> function must be called when starting a new hash. </dd></dl>
</div>
</div>
<a class="anchor" id="ga3eaeb3afd68b505b385e5e6a2f23b9b3"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int cau_sha256_initialize_output </td>
<td>(</td>
<td class="paramtype">const unsigned int *&#160;</td>
<td class="paramname"><em>output</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function initializes the SHA256 state variables. The output can be used as input to <a class="el" href="group__mmcau.html#gae5df61c63c55e70d9d3c3e272accff3e" title="SHA256: Updates SHA256 state variables with one message block. ">cau_sha256_hash()</a> and <a class="el" href="group__mmcau.html#ga71eebbc5acd8fd66b88456ea57b1deb7" title="SHA256: Updates SHA256 state variables with n message blocks. ">cau_sha256_hash_n()</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">sha256_state</td><td>Pointer to 256-bit block of SHA2 state variables a,b,c,d,e,f,g,h </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>All pointers must have word (4 bytes) alignment </dd></dl>
<dl class="section return"><dt>Returns</dt><dd>0 No error. CAU hardware support for SHA256 is present. </dd>
<dd>
-1 Error. CAU hardware support for SHA256 is not present. </dd></dl>
</div>
</div>
<a class="anchor" id="ga71eebbc5acd8fd66b88456ea57b1deb7"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void cau_sha256_hash_n </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int&#160;</td>
<td class="paramname"><em>num_blks</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int *&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function updates SHA256 state variables for one or more input message blocks</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">msg_data</td><td>Pointer to start of input message data </td></tr>
<tr><td class="paramdir"></td><td class="paramname">num_blks</td><td>Number of 512-bit blocks to process </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">sha256_state</td><td>Pointer to 256-bit block of SHA2 state variables: a,b,c,d,e,f,g,h </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>All pointers must have word (4 bytes) alignment </dd>
<dd>
Input message and digest output blocks must not overlap. The <a class="el" href="group__mmcau.html#ga3eaeb3afd68b505b385e5e6a2f23b9b3" title="SHA256: Initializes the SHA256 state variables. ">cau_sha256_initialize_output()</a> function must be called when starting a new hash. Useful when handling non-contiguous input message blocks. </dd></dl>
</div>
</div>
<a class="anchor" id="ga74b24a61da611bd46d2b961a4e2ac457"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void cau_sha256_update </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int&#160;</td>
<td class="paramname"><em>num_blks</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int *&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function updates SHA256 state variables for one or more input message blocks. It starts a new hash as it internally calls <a class="el" href="group__mmcau.html#ga3eaeb3afd68b505b385e5e6a2f23b9b3" title="SHA256: Initializes the SHA256 state variables. ">cau_sha256_initialize_output()</a> first.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">msg_data</td><td>Pointer to start of input message data </td></tr>
<tr><td class="paramdir"></td><td class="paramname">num_blks</td><td>Number of 512-bit blocks to process </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">sha256_state</td><td>Pointer to 256-bit block of SHA2 state variables: a,b,c,d,e,f,g,h </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>All pointers must have word (4 bytes) alignment </dd>
<dd>
Input message and digest output blocks must not overlap. The <a class="el" href="group__mmcau.html#ga3eaeb3afd68b505b385e5e6a2f23b9b3" title="SHA256: Initializes the SHA256 state variables. ">cau_sha256_initialize_output()</a> function is not required to be called as it is called internally to start a new hash. All input message blocks must be contiguous. </dd></dl>
</div>
</div>
<a class="anchor" id="gae5df61c63c55e70d9d3c3e272accff3e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void cau_sha256_hash </td>
<td>(</td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int *&#160;</td>
<td class="paramname"><em>output</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function updates SHA256 state variables for one input message block</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">msg_data</td><td>Pointer to start of 512-bits of input message data </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">sha256_state</td><td>Pointer to 256-bit block of SHA2 state variables: a,b,c,d,e,f,g,h </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>All pointers must have word (4 bytes) alignment </dd>
<dd>
Input message and digest output blocks must not overlap. The <a class="el" href="group__mmcau.html#ga3eaeb3afd68b505b385e5e6a2f23b9b3" title="SHA256: Initializes the SHA256 state variables. ">cau_sha256_initialize_output()</a> function must be called when starting a new hash. </dd></dl>
</div>
</div>
<a class="anchor" id="ga8ba5ac242df1ad4db302f351842d1401"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t MMCAU_AES_SetKey </td>
<td>(</td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>key</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const size_t&#160;</td>
<td class="paramname"><em>keySize</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>keySch</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function performs an AES key expansion.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">key</td><td>Pointer to input key (128, 192, 256 bits in length). </td></tr>
<tr><td class="paramdir"></td><td class="paramname">keySize</td><td>Key size in bytes (16, 24, 32) </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">keySch</td><td>Pointer to key schedule output (44, 52, 60 longwords) </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>Table below shows the requirements for the <a class="el" href="group__mmcau.html#ga8ba5ac242df1ad4db302f351842d1401" title="AES: Performs an AES key expansion. ">MMCAU_AES_SetKey()</a> function when using AES128, AES192, or AES256.<br/>
| [in] Key Size (bits) | [out] Key Schedule Size (32 bit data values) |<br/>
| :------------------&mdash;: | :-----------------------------------------&mdash;: |<br/>
| 128 | 44 |<br/>
| 192 | 52 |<br/>
| 256 | 60 | </dd></dl>
<dl class="section return"><dt>Returns</dt><dd>Status of the operation. (kStatus_Success, kStatus_InvalidArgument, kStatus_Fail) </dd></dl>
</div>
</div>
<a class="anchor" id="gaacbf9ed061d91621e2139f17e63a42c4"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t MMCAU_AES_EncryptEcb </td>
<td>(</td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>keySch</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>aesRounds</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>out</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function encrypts a single 16-byte block for AES128, AES192, and AES256.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">in</td><td>Pointer to 16-byte block of input plaintext. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">keySch</td><td>Pointer to key schedule (44, 52, 60 longwords). </td></tr>
<tr><td class="paramdir"></td><td class="paramname">aesRounds</td><td>Number of AES rounds (10, 12, 14 = f(key_schedule)). </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>Pointer to 16-byte block of output ciphertext. </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>Input and output blocks may overlap.<br/>
Table below shows the requirements for the <a class="el" href="group__mmcau.html#gaacbf9ed061d91621e2139f17e63a42c4" title="AES: Encrypts a single 16 byte block. ">MMCAU_AES_EncryptEcb()</a>/MMCAU_AES_DecryptEcb() function when using AES128, AES192 or AES256.<br/>
| Block Cipher | [in] Key Schedule Size (longwords) | [in] Number of AES rounds |<br/>
| :-------&mdash;: | :-----------------------------&mdash;: | :--------------------&mdash;: |<br/>
| AES128 | 44 | 10 |<br/>
| AES192 | 52 | 12 |<br/>
| AES256 | 60 | 14 | </dd></dl>
<dl class="section return"><dt>Returns</dt><dd>Status of the operation. (kStatus_Success, kStatus_InvalidArgument, kStatus_Fail) </dd></dl>
</div>
</div>
<a class="anchor" id="ga53c2e39bd241d014c02954a0c5727ab3"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t MMCAU_AES_DecryptEcb </td>
<td>(</td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>keySch</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>aesRounds</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>out</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function decrypts a single 16-byte block for AES128, AES192, and AES256.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">in</td><td>Pointer to 16-byte block of input ciphertext. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">keySch</td><td>Pointer to key schedule (44, 52, 60 longwords). </td></tr>
<tr><td class="paramdir"></td><td class="paramname">aesRounds</td><td>Number of AES rounds (10, 12, 14 = f(key_schedule)). </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>Pointer to 16-byte block of output plaintext. </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>Input and output blocks may overlap.<br/>
Table below shows the requirements for the <a class="el" href="group__mmcau.html#gab12b6dbcd3c82a584475fa420cc9edda" title="AES: Encrypts a single 16 byte block. ">cau_aes_encrypt()</a>/cau_aes_decrypt(). function when using AES128, AES192 or AES256.<br/>
| Block Cipher | [in] Key Schedule Size (longwords) | [in] Number of AES rounds |<br/>
| :-------&mdash;: | :-----------------------------&mdash;: | :--------------------&mdash;: |<br/>
| AES128 | 44 | 10 |<br/>
| AES192 | 52 | 12 |<br/>
| AES256 | 60 | 14 | </dd></dl>
<dl class="section return"><dt>Returns</dt><dd>Status of the operation. (kStatus_Success, kStatus_InvalidArgument, kStatus_Fail) </dd></dl>
</div>
</div>
<a class="anchor" id="gabe714ea9bb3460e3835fed95060bb372"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t MMCAU_DES_ChkParity </td>
<td>(</td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>key</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function checks the parity of a DES key.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">key</td><td>64-bit DES key with parity bits. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>kStatus_Success No error. </dd>
<dd>
kStatus_Fail Parity error. </dd>
<dd>
kStatus_InvalidArgument Key argument is NULL. </dd></dl>
</div>
</div>
<a class="anchor" id="ga17cd0dad2ac42b719818d4c3da03b7b2"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t MMCAU_DES_EncryptEcb </td>
<td>(</td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>key</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>out</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function encrypts a single 8-byte block with the DES algorithm.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">in</td><td>Pointer to 8-byte block of input plaintext. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">key</td><td>Pointer to 64-bit DES key with parity bits. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>Pointer to 8-byte block of output ciphertext. </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>Input and output blocks may overlap. </dd></dl>
<dl class="section return"><dt>Returns</dt><dd>Status of the operation. (kStatus_Success, kStatus_InvalidArgument, kStatus_Fail) </dd></dl>
</div>
</div>
<a class="anchor" id="ga45e8273fcf3d862bdcc4946bca8c895a"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t MMCAU_DES_DecryptEcb </td>
<td>(</td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>key</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>out</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function decrypts a single 8-byte block with the DES algorithm.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">in</td><td>Pointer to 8-byte block of input ciphertext. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">key</td><td>Pointer to 64-bit DES key with parity bits. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>Pointer to 8-byte block of output plaintext. </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>Input and output blocks may overlap. </dd></dl>
<dl class="section return"><dt>Returns</dt><dd>Status of the operation. (kStatus_Success, kStatus_InvalidArgument, kStatus_Fail) </dd></dl>
</div>
</div>
<a class="anchor" id="gab7eb1238c89407b9f64ec9bcd55a2d02"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t MMCAU_MD5_InitializeOutput </td>
<td>(</td>
<td class="paramtype">uint32_t *&#160;</td>
<td class="paramname"><em>md5State</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function initializes the MD5 state variables. The output can be used as input to <a class="el" href="group__mmcau.html#ga64afcbb15fffb8fc5ded30fe2c8e4b86" title="MD5: Updates the MD5 state variables with n message blocks. ">MMCAU_MD5_HashN()</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">md5State</td><td>Pointer to 128-bit block of md5 state variables: a,b,c,d </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga64afcbb15fffb8fc5ded30fe2c8e4b86"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t MMCAU_MD5_HashN </td>
<td>(</td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>msgData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>numBlocks</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t *&#160;</td>
<td class="paramname"><em>md5State</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function updates the MD5 state variables for one or more input message blocks.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">msgData</td><td>Pointer to start of input message data. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">numBlocks</td><td>Number of 512-bit blocks to process. </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">md5State</td><td>Pointer to 128-bit block of MD5 state variables: a, b, c, d. </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>Input message and digest output blocks must not overlap. The <a class="el" href="group__mmcau.html#gab7eb1238c89407b9f64ec9bcd55a2d02" title="MD5: Initializes the MD5 state variables. ">MMCAU_MD5_InitializeOutput()</a> function must be called when starting a new hash. Useful when handling non-contiguous input message blocks. </dd></dl>
</div>
</div>
<a class="anchor" id="ga08f0509d34e5d3846c3166f44d15acda"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t MMCAU_MD5_Update </td>
<td>(</td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>msgData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>numBlocks</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t *&#160;</td>
<td class="paramname"><em>md5State</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function updates the MD5 state variables for one or more input message blocks. It starts a new hash as it internally calls <a class="el" href="group__mmcau.html#gab7eb1238c89407b9f64ec9bcd55a2d02" title="MD5: Initializes the MD5 state variables. ">MMCAU_MD5_InitializeOutput()</a> first.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">msgData</td><td>Pointer to start of input message data. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">numBlocks</td><td>Number of 512-bit blocks to process. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">md5State</td><td>Pointer to 128-bit block of MD5 state variables: a, b, c, d. </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>Input message and digest output blocks must not overlap. The <a class="el" href="group__mmcau.html#gab7eb1238c89407b9f64ec9bcd55a2d02" title="MD5: Initializes the MD5 state variables. ">MMCAU_MD5_InitializeOutput()</a> function is not required to be called as it is called internally to start a new hash. All input message blocks must be contiguous. </dd></dl>
</div>
</div>
<a class="anchor" id="gac0d57148b031f25f9ed1282d8d41e2ee"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t MMCAU_SHA1_InitializeOutput </td>
<td>(</td>
<td class="paramtype">uint32_t *&#160;</td>
<td class="paramname"><em>sha1State</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function initializes the SHA1 state variables. The output can be used as input to <a class="el" href="group__mmcau.html#ga1b050689e4e566909255e4f95573735a" title="SHA1: Updates the SHA1 state variables with n message blocks. ">MMCAU_SHA1_HashN()</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">sha1State</td><td>Pointer to 160-bit block of SHA1 state variables: a, b, c, d, e. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga1b050689e4e566909255e4f95573735a"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t MMCAU_SHA1_HashN </td>
<td>(</td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>msgData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>numBlocks</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t *&#160;</td>
<td class="paramname"><em>sha1State</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function updates the SHA1 state variables for one or more input message blocks.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">msgData</td><td>Pointer to start of input message data. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">numBlocks</td><td>Number of 512-bit blocks to process. </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">sha1State</td><td>Pointer to 160-bit block of SHA1 state variables: a, b, c, d, e. </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>Input message and digest output blocks must not overlap. The <a class="el" href="group__mmcau.html#gac0d57148b031f25f9ed1282d8d41e2ee" title="SHA1: Initializes the SHA1 state variables. ">MMCAU_SHA1_InitializeOutput()</a> function must be called when starting a new hash. Useful when handling non-contiguous input message blocks. </dd></dl>
</div>
</div>
<a class="anchor" id="ga1b25041a7b79e8b545262c6ad5473a52"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t MMCAU_SHA1_Update </td>
<td>(</td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>msgData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>numBlocks</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t *&#160;</td>
<td class="paramname"><em>sha1State</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function updates the SHA1 state variables for one or more input message blocks. It starts a new hash as it internally calls <a class="el" href="group__mmcau.html#gac0d57148b031f25f9ed1282d8d41e2ee" title="SHA1: Initializes the SHA1 state variables. ">MMCAU_SHA1_InitializeOutput()</a> first.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">msgData</td><td>Pointer to start of input message data. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">numBlocks</td><td>Number of 512-bit blocks to process. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">sha1State</td><td>Pointer to 160-bit block of SHA1 state variables: a, b, c, d, e. </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>Input message and digest output blocks must not overlap. The <a class="el" href="group__mmcau.html#gac0d57148b031f25f9ed1282d8d41e2ee" title="SHA1: Initializes the SHA1 state variables. ">MMCAU_SHA1_InitializeOutput()</a> function is not required to be called as it is called internally to start a new hash. All input message blocks must be contiguous. </dd></dl>
</div>
</div>
<a class="anchor" id="ga58836d2e9cc5c7296e2ec06af8af2677"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t MMCAU_SHA256_InitializeOutput </td>
<td>(</td>
<td class="paramtype">uint32_t *&#160;</td>
<td class="paramname"><em>sha256State</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function initializes the SHA256 state variables. The output can be used as input to <a class="el" href="group__mmcau.html#ga67c9bc0952e2c34a0e2ebf309d530e5b" title="SHA256: Updates the SHA256 state variables with n message blocks. ">MMCAU_SHA256_HashN()</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">sha256State</td><td>Pointer to 256-bit block of SHA2 state variables a, b, c, d, e, f, g, h. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>kStatus_Success No error. CAU hardware support for SHA256 is present. </dd>
<dd>
kStatus_Fail Error. CAU hardware support for SHA256 is not present. </dd>
<dd>
kStatus_InvalidArgument Error. sha256State is NULL. </dd></dl>
</div>
</div>
<a class="anchor" id="ga67c9bc0952e2c34a0e2ebf309d530e5b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t MMCAU_SHA256_HashN </td>
<td>(</td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>numBlocks</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t *&#160;</td>
<td class="paramname"><em>sha256State</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function updates SHA256 state variables for one or more input message blocks.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">msgData</td><td>Pointer to start of input message data. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">numBlocks</td><td>Number of 512-bit blocks to process. </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">sha256State</td><td>Pointer to 256-bit block of SHA2 state variables: a, b, c, d, e, f, g, h. </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>Input message and digest output blocks must not overlap. The <a class="el" href="group__mmcau.html#ga58836d2e9cc5c7296e2ec06af8af2677" title="SHA256: Initializes the SHA256 state variables. ">MMCAU_SHA256_InitializeOutput()</a> function must be called when starting a new hash. Useful when handling non-contiguous input message blocks. </dd></dl>
</div>
</div>
<a class="anchor" id="gaf9208c4f59492a9d5a0fbd256dbeb7f8"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">status_t MMCAU_SHA256_Update </td>
<td>(</td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>numBlocks</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t *&#160;</td>
<td class="paramname"><em>sha256State</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function updates the SHA256 state variables for one or more input message blocks. It starts a new hash as it internally calls <a class="el" href="group__mmcau.html#ga3eaeb3afd68b505b385e5e6a2f23b9b3" title="SHA256: Initializes the SHA256 state variables. ">cau_sha256_initialize_output()</a> first.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">msgData</td><td>Pointer to start of input message data. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">numBlocks</td><td>Number of 512-bit blocks to process. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">sha256State</td><td>Pointer to 256-bit block of SHA2 state variables: a, b, c, d, e, f, g, h. </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>Input message and digest output blocks must not overlap. The <a class="el" href="group__mmcau.html#ga58836d2e9cc5c7296e2ec06af8af2677" title="SHA256: Initializes the SHA256 state variables. ">MMCAU_SHA256_InitializeOutput()</a> function is not required to be called. as it is called internally to start a new hash. All input message blocks must be contiguous. </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 Freescale Semiconductor, Inc. All rights reserved.
</li>
</ul>
</div>
</body>
</html>