Files
libaaruformat/docs/html/wiiu__crypto_8h_source.html

189 lines
22 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libaaruformat: src/wiiu/wiiu_crypto.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">libaaruformat<span id="projectnumber">&#160;1.0</span>
</div>
<div id="projectbrief">Aaru Data Preservation Suite - Format Library</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('wiiu__crypto_8h_source.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">wiiu_crypto.h</div></div>
</div><!--header-->
<div class="contents">
<a href="wiiu__crypto_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * This file is part of the Aaru Data Preservation Suite.</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * Copyright (c) 2019-2026 Natalia Portillo.</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> *</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * This library is free software; you can redistribute it and/or modify</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * it under the terms of the GNU Lesser General Public License as</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * published by the Free Software Foundation; version 2.1 of the License.</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> *</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> * This library is distributed in the hope that it will be useful, but</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Lesser General Public License for more details.</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> *</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * License along with this library; if not, see</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * &lt;https://www.gnu.org/licenses/&gt;.</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> *</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> * Wii U disc encryption: partition key map, encrypt/decrypt, serialization.</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment"> */</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#ifndef LIBAARUFORMAT_WIIU_CRYPTO_H</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#define LIBAARUFORMAT_WIIU_CRYPTO_H</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include &lt;stdbool.h&gt;</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment">/* Forward declaration */</span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code hl_struct" href="structaaruformat__context.html">aaruformat_context</a> <a class="code hl_struct" href="structaaruformat__context.html">aaruformat_context</a>;</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#ifdef __cplusplus</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>{</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="wiiu__crypto_8h.html#a1445016762d8e7fe5a0220e3cdded2d3"> 35</a></span><span class="preprocessor">#define WIIU_CRYPTO_SECTOR_SIZE 0x8000 </span><span class="preprocessor"></span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="wiiu__crypto_8h.html#ae5a3916c486e8afd292c8ea9bebef9fd"> 36</a></span><span class="preprocessor">#define WIIU_LOGICAL_PER_PHYSICAL 16 </span><span class="preprocessor"></span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="wiiu__crypto_8h.html#a3a88817f94211137ebdaa908f6196ecd"> 37</a></span><span class="preprocessor">#define WIIU_HEADER_PHYSICAL_SECTORS 3 </span><span class="preprocessor"></span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="wiiu__crypto_8h.html#ae77e5265ba4f2fad10f02f7ee2b614a6"> 38</a></span><span class="preprocessor">#define WIIU_MAX_PARTITIONS 8 </span><span class="preprocessor"></span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span></div>
<div class="foldopen" id="foldopen00048" data-start="{" data-end="};">
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="structWiiuPartitionRegion.html"> 48</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code hl_struct" href="structWiiuPartitionRegion.html">WiiuPartitionRegion</a></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> {</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="structWiiuPartitionRegion.html#a7dc95ceb3b28bb544087cdf3d2f4d415"> 50</a></span> uint32_t <a class="code hl_variable" href="structWiiuPartitionRegion.html#a7dc95ceb3b28bb544087cdf3d2f4d415">start_sector</a>; </div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="structWiiuPartitionRegion.html#ab6769e9f2f952526ecd2638badc5a1b0"> 51</a></span> uint32_t <a class="code hl_variable" href="structWiiuPartitionRegion.html#ab6769e9f2f952526ecd2638badc5a1b0">end_sector</a>; </div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="structWiiuPartitionRegion.html#a1f9ac975963490a111efa7bf377328d5"> 52</a></span> uint8_t <a class="code hl_variable" href="structWiiuPartitionRegion.html#a1f9ac975963490a111efa7bf377328d5">key</a>[16]; </div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="wiiu__crypto_8h.html#a4b3dd1292486617335067a7a2901017b"> 53</a></span> } <a class="code hl_struct" href="structWiiuPartitionRegion.html">WiiuPartitionRegion</a>;</div>
</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">const</span> uint8_t *<a class="code hl_function" href="wiiu__crypto_8h.html#ad545b76f7c59ef6f446fb1eb0dffae51">wiiu_get_sector_key</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structWiiuPartitionRegion.html">WiiuPartitionRegion</a> *regions, uint32_t region_count,</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> uint64_t logical_sector);</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span></div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="wiiu__crypto_8h.html#af0811dc6f276a4f6accae2b62e5d462c">wiiu_is_sector_encrypted</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structWiiuPartitionRegion.html">WiiuPartitionRegion</a> *regions, uint32_t region_count, uint64_t logical_sector);</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span></div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keywordtype">void</span> <a class="code hl_function" href="wiiu__crypto_8h.html#a50434d7209fe488e67c983d276bd002c">wiiu_encrypt_physical_sector</a>(<span class="keyword">const</span> uint8_t key[16], uint8_t *data, uint32_t length);</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span></div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordtype">void</span> <a class="code hl_function" href="wiiu__crypto_8h.html#a8ce6ebfefba6603f42b675ff66111a60">wiiu_decrypt_physical_sector</a>(<span class="keyword">const</span> uint8_t key[16], uint8_t *data, uint32_t length);</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span></div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> int32_t <a class="code hl_function" href="wiiu__crypto_8h.html#ab41b22d7e44eea39171cb2fcf07b3f7e">wiiu_serialize_partition_key_map</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structWiiuPartitionRegion.html">WiiuPartitionRegion</a> *regions, uint32_t count, uint8_t **out_data,</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> uint32_t *out_len);</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span></div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> int32_t <a class="code hl_function" href="wiiu__crypto_8h.html#a56ef715248dfeaef2a1d78400449c27b">wiiu_deserialize_partition_key_map</a>(<span class="keyword">const</span> uint8_t *data, uint32_t data_len, <a class="code hl_struct" href="structWiiuPartitionRegion.html">WiiuPartitionRegion</a> **regions,</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> uint32_t *count);</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span></div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordtype">void</span> <a class="code hl_function" href="wiiu__crypto_8h.html#a791f63da879f72714851b7c7fb707b77">wiiu_lazy_init</a>(<a class="code hl_struct" href="structaaruformat__context.html">aaruformat_context</a> *ctx);</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="preprocessor">#ifdef __cplusplus</span></div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span>}</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> </div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="preprocessor">#endif </span><span class="comment">/* LIBAARUFORMAT_WIIU_CRYPTO_H */</span><span class="preprocessor"></span></div>
<div class="ttc" id="astructWiiuPartitionRegion_html"><div class="ttname"><a href="structWiiuPartitionRegion.html">WiiuPartitionRegion</a></div><div class="ttdoc">A Wii U partition region entry (in-memory representation).</div><div class="ttdef"><b>Definition</b> <a href="#l00048">wiiu_crypto.h:49</a></div></div>
<div class="ttc" id="astructWiiuPartitionRegion_html_a1f9ac975963490a111efa7bf377328d5"><div class="ttname"><a href="structWiiuPartitionRegion.html#a1f9ac975963490a111efa7bf377328d5">WiiuPartitionRegion::key</a></div><div class="ttdeci">uint8_t key[16]</div><div class="ttdoc">AES-128 key for encrypted sectors in this partition.</div><div class="ttdef"><b>Definition</b> <a href="#l00052">wiiu_crypto.h:52</a></div></div>
<div class="ttc" id="astructWiiuPartitionRegion_html_a7dc95ceb3b28bb544087cdf3d2f4d415"><div class="ttname"><a href="structWiiuPartitionRegion.html#a7dc95ceb3b28bb544087cdf3d2f4d415">WiiuPartitionRegion::start_sector</a></div><div class="ttdeci">uint32_t start_sector</div><div class="ttdoc">First physical sector of partition (plaintext header).</div><div class="ttdef"><b>Definition</b> <a href="#l00050">wiiu_crypto.h:50</a></div></div>
<div class="ttc" id="astructWiiuPartitionRegion_html_ab6769e9f2f952526ecd2638badc5a1b0"><div class="ttname"><a href="structWiiuPartitionRegion.html#ab6769e9f2f952526ecd2638badc5a1b0">WiiuPartitionRegion::end_sector</a></div><div class="ttdeci">uint32_t end_sector</div><div class="ttdoc">End physical sector (exclusive).</div><div class="ttdef"><b>Definition</b> <a href="#l00051">wiiu_crypto.h:51</a></div></div>
<div class="ttc" id="astructaaruformat__context_html"><div class="ttname"><a href="structaaruformat__context.html">aaruformat_context</a></div><div class="ttdoc">Master context representing an open or increation Aaru image.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00174">context.h:175</a></div></div>
<div class="ttc" id="awiiu__crypto_8h_html_a50434d7209fe488e67c983d276bd002c"><div class="ttname"><a href="wiiu__crypto_8h.html#a50434d7209fe488e67c983d276bd002c">wiiu_encrypt_physical_sector</a></div><div class="ttdeci">void wiiu_encrypt_physical_sector(const uint8_t key[16], uint8_t *data, uint32_t length)</div><div class="ttdoc">Encrypt a full 0x8000-byte physical sector in-place.</div><div class="ttdef"><b>Definition</b> <a href="wiiu__crypto_8c_source.html#l00072">wiiu_crypto.c:72</a></div></div>
<div class="ttc" id="awiiu__crypto_8h_html_a56ef715248dfeaef2a1d78400449c27b"><div class="ttname"><a href="wiiu__crypto_8h.html#a56ef715248dfeaef2a1d78400449c27b">wiiu_deserialize_partition_key_map</a></div><div class="ttdeci">int32_t wiiu_deserialize_partition_key_map(const uint8_t *data, uint32_t data_len, WiiuPartitionRegion **regions, uint32_t *count)</div><div class="ttdoc">Deserialize a partition key map from a media tag buffer.</div><div class="ttdef"><b>Definition</b> <a href="wiiu__crypto_8c_source.html#l00112">wiiu_crypto.c:112</a></div></div>
<div class="ttc" id="awiiu__crypto_8h_html_a791f63da879f72714851b7c7fb707b77"><div class="ttname"><a href="wiiu__crypto_8h.html#a791f63da879f72714851b7c7fb707b77">wiiu_lazy_init</a></div><div class="ttdeci">void wiiu_lazy_init(aaruformat_context *ctx)</div><div class="ttdoc">Lazy initialization: load disc key and partition key map from media tags.</div><div class="ttdef"><b>Definition</b> <a href="wiiu__crypto_8c_source.html#l00155">wiiu_crypto.c:155</a></div></div>
<div class="ttc" id="awiiu__crypto_8h_html_a8ce6ebfefba6603f42b675ff66111a60"><div class="ttname"><a href="wiiu__crypto_8h.html#a8ce6ebfefba6603f42b675ff66111a60">wiiu_decrypt_physical_sector</a></div><div class="ttdeci">void wiiu_decrypt_physical_sector(const uint8_t key[16], uint8_t *data, uint32_t length)</div><div class="ttdoc">Decrypt a full 0x8000-byte physical sector in-place.</div><div class="ttdef"><b>Definition</b> <a href="wiiu__crypto_8c_source.html#l00079">wiiu_crypto.c:79</a></div></div>
<div class="ttc" id="awiiu__crypto_8h_html_ab41b22d7e44eea39171cb2fcf07b3f7e"><div class="ttname"><a href="wiiu__crypto_8h.html#ab41b22d7e44eea39171cb2fcf07b3f7e">wiiu_serialize_partition_key_map</a></div><div class="ttdeci">int32_t wiiu_serialize_partition_key_map(const WiiuPartitionRegion *regions, uint32_t count, uint8_t **out_data, uint32_t *out_len)</div><div class="ttdoc">Serialize a partition key map for storage as a media tag.</div><div class="ttdef"><b>Definition</b> <a href="wiiu__crypto_8c_source.html#l00086">wiiu_crypto.c:86</a></div></div>
<div class="ttc" id="awiiu__crypto_8h_html_ad545b76f7c59ef6f446fb1eb0dffae51"><div class="ttname"><a href="wiiu__crypto_8h.html#ad545b76f7c59ef6f446fb1eb0dffae51">wiiu_get_sector_key</a></div><div class="ttdeci">const uint8_t * wiiu_get_sector_key(const WiiuPartitionRegion *regions, uint32_t region_count, uint64_t logical_sector)</div><div class="ttdoc">Get the encryption key for a given logical sector (2048-byte).</div><div class="ttdef"><b>Definition</b> <a href="wiiu__crypto_8c_source.html#l00043">wiiu_crypto.c:43</a></div></div>
<div class="ttc" id="awiiu__crypto_8h_html_af0811dc6f276a4f6accae2b62e5d462c"><div class="ttname"><a href="wiiu__crypto_8h.html#af0811dc6f276a4f6accae2b62e5d462c">wiiu_is_sector_encrypted</a></div><div class="ttdeci">bool wiiu_is_sector_encrypted(const WiiuPartitionRegion *regions, uint32_t region_count, uint64_t logical_sector)</div><div class="ttdoc">Check if a logical sector (2048-byte) is in an encrypted region.</div><div class="ttdef"><b>Definition</b> <a href="wiiu__crypto_8c_source.html#l00069">wiiu_crypto.c:69</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a href="dir_07197fd9e770b012173508458e01c875.html">wiiu</a></li><li class="navelem"><a href="wiiu__crypto_8h.html">wiiu_crypto.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>