stdex/hash_8hpp_source.html

765 lines
110 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. 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.11.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>stdex: include/stdex/hash.hpp 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="resize.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">stdex
</div>
<div id="projectbrief">Additional custom or not Standard C++ covered algorithms</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.11.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
/* @license-end */
</script>
<!-- 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 id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_fca3c47b2ea228727bd6729832f89576.html">stdex</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">hash.hpp</div></div>
</div><!--header-->
<div class="contents">
<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"> SPDX-License-Identifier: MIT</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> Copyright © 2016-2024 Amebis</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> </div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> </div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &quot;assert.hpp&quot;</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;compat.hpp&quot;</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &quot;math.h&quot;</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &quot;stream.hpp&quot;</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#if defined(__GNUC__)</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#pragma GCC diagnostic push</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#pragma GCC diagnostic ignored &quot;-Wunknown-pragmas&quot;</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="keyword">namespace </span>stdex</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">#pragma warning(push)</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#pragma warning(disable: 26495)</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;</div>
<div class="foldopen" id="foldopen00028" data-start="{" data-end="};">
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="classstdex_1_1basic__hash.html"> 28</a></span> <span class="keyword">class </span><a class="code hl_class" href="classstdex_1_1basic__hash.html">basic_hash</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="keyword">public</span>:</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">virtual</span> <a class="code hl_class" href="classstdex_1_1basic__hash.html">~basic_hash</a>() {}</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="classstdex_1_1basic__hash.html#af5e2ff7b83da5a663fa3c9766734b771"> 36</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1basic__hash.html#af5e2ff7b83da5a663fa3c9766734b771">clear</a>() = 0;</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="classstdex_1_1basic__hash.html#a198a7f9e606ac26dbd5a345108e5efc9"> 44</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1basic__hash.html#a198a7f9e606ac26dbd5a345108e5efc9">hash</a>(_In_reads_bytes_opt_(length) <span class="keyword">const</span> <span class="keywordtype">void</span>* <a class="code hl_function" href="classstdex_1_1basic__hash.html#a00c5ecc12bc29e5381743fa2239a1dc3">data</a>, _In_ <span class="keywordtype">size_t</span> length) = 0;</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="classstdex_1_1basic__hash.html#ab2f4729c60bbb2ce12d5100be26108cf"> 49</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1basic__hash.html#ab2f4729c60bbb2ce12d5100be26108cf">finalize</a>() = 0;</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="classstdex_1_1basic__hash.html#a9b8b5f91873e5d2cfe93533832318b5a"> 54</a></span> <span class="keyword">static</span> <span class="keywordtype">size_t</span> <a class="code hl_function" href="classstdex_1_1basic__hash.html#a9b8b5f91873e5d2cfe93533832318b5a">size</a>() { <span class="keywordflow">return</span> <span class="keyword">sizeof</span>(T); }</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="classstdex_1_1basic__hash.html#a00c5ecc12bc29e5381743fa2239a1dc3"> 59</a></span> <span class="keyword">const</span> T&amp; <a class="code hl_function" href="classstdex_1_1basic__hash.html#a00c5ecc12bc29e5381743fa2239a1dc3">data</a>() { <span class="keywordflow">return</span> m_value; };</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="classstdex_1_1basic__hash.html#a7cacac78cdfbf561da8d9f1a5841c5cb"> 64</a></span> <span class="keyword">operator</span> <span class="keyword">const</span> T&amp;() <span class="keyword">const</span> { <span class="keywordflow">return</span> m_value; };</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> T m_value;</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> };</div>
</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;</div>
<div class="foldopen" id="foldopen00074" data-start="{" data-end="};">
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="classstdex_1_1block__hash.html"> 74</a></span> <span class="keyword">class </span><a class="code hl_class" href="classstdex_1_1block__hash.html">block_hash</a> : <span class="keyword">public</span> <a class="code hl_class" href="classstdex_1_1basic__hash.html">basic_hash</a>&lt;T&gt;</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> {</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00077" data-start="{" data-end="}">
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"><a class="line" href="classstdex_1_1block__hash.html#a8750f9c24cd22bd879dc638256534aec"> 77</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1block__hash.html#a8750f9c24cd22bd879dc638256534aec">clear</a>()</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> {</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> m_counter[0] = m_counter[1] = 0;</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> }</div>
</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
<div class="foldopen" id="foldopen00082" data-start="{" data-end="}">
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="classstdex_1_1block__hash.html#a463399ef0ec15ec0be0040ffa16afbbb"> 82</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1block__hash.html#a463399ef0ec15ec0be0040ffa16afbbb">hash</a>(_In_reads_bytes_opt_(length) <span class="keyword">const</span> <span class="keywordtype">void</span>* <a class="code hl_function" href="classstdex_1_1basic__hash.html#a00c5ecc12bc29e5381743fa2239a1dc3">data</a>, _In_ <span class="keywordtype">size_t</span> length)</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> {</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> stdex_assert(<a class="code hl_function" href="classstdex_1_1basic__hash.html#a00c5ecc12bc29e5381743fa2239a1dc3">data</a> || !length);</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="comment">// Compute number of bytes mod 64.</span></div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">size_t</span> j = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>((m_counter[0] &gt;&gt; 3) &amp; 63);</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="comment">// Update number of m_counter[1].</span></div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">if</span> ((m_counter[0] += (<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(length) &lt;&lt; 3)) &lt; (<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(length) &lt;&lt; 3))</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> m_counter[1]++;</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> m_counter[1] += <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(length) &gt;&gt; 29;</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="comment">// Transform as many times as possible.</span></div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordtype">size_t</span> i, remainder = 64 - j;</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">if</span> (length &gt;= remainder) {</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> stdex_assert(j &lt; 64 &amp;&amp; j + remainder &lt;= 64);</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> stdex_assert(remainder &lt;= length);</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> memcpy(m_queue + j, <a class="code hl_function" href="classstdex_1_1basic__hash.html#a00c5ecc12bc29e5381743fa2239a1dc3">data</a>, remainder);</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> hash_block();</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">for</span> (i = remainder; i + 64 &lt;= length; i += 64) {</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="preprocessor">#pragma warning(push)</span></div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="preprocessor">#pragma warning(disable: 6385)</span></div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> memcpy(m_queue, <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(<a class="code hl_function" href="classstdex_1_1basic__hash.html#a00c5ecc12bc29e5381743fa2239a1dc3">data</a>) + i, 64);</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="preprocessor">#pragma warning(pop)</span></div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> hash_block();</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> }</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> j = 0;</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> }</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> i = 0;</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="comment">// Buffer remaining input.</span></div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> stdex_assert(j &lt; 64 &amp;&amp; j + length - i &lt;= 64);</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> stdex_assert(i &lt;= length);</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> memcpy(m_queue + j, <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(<a class="code hl_function" href="classstdex_1_1basic__hash.html#a00c5ecc12bc29e5381743fa2239a1dc3">data</a>) + i, length - i);</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> }</div>
</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> hash_block() = 0;</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> uint32_t m_counter[2];</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">union </span>{</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> uint8_t m_queue[64];</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> uint32_t m_temp[16];</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> };</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> };</div>
</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="preprocessor">#pragma warning(pop)</span></div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;</div>
<div class="foldopen" id="foldopen00137" data-start="{" data-end="};">
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"><a class="line" href="classstdex_1_1stream__hasher.html"> 137</a></span> <span class="keyword">class </span><a class="code hl_class" href="classstdex_1_1stream__hasher.html">stream_hasher</a> : <span class="keyword">public</span> <a class="code hl_class" href="classstdex_1_1stream_1_1converter.html">stdex::stream::converter</a></div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> {</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <a class="code hl_class" href="classstdex_1_1stream__hasher.html">stream_hasher</a>(_Inout_ <a class="code hl_class" href="classstdex_1_1basic__hash.html">basic_hash&lt;T&gt;</a>&amp; hash, _Inout_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; source) :</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <a class="code hl_class" href="classstdex_1_1stream_1_1converter.html">stdex::stream::converter</a>(source),</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> m_hash(hash)</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> </div>
<div class="foldopen" id="foldopen00145" data-start="{" data-end="}">
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"><a class="line" href="classstdex_1_1stream__hasher.html#a9727f0c56f11978c2df6e31e8509a38b"> 145</a></span> <span class="keyword">virtual</span> _Success_(<span class="keywordflow">return</span> != 0 || length == 0) size_t <a class="code hl_function" href="classstdex_1_1stream__hasher.html#a9727f0c56f11978c2df6e31e8509a38b">read</a>(</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> _Out_writes_bytes_to_opt_(length, return) <span class="keywordtype">void</span>* data, _In_ <span class="keywordtype">size_t</span> length)</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> {</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordtype">size_t</span> num_read = <a class="code hl_function" href="classstdex_1_1stream_1_1converter.html#abdca66af4847c6f8b6d87a0909fc061f">stdex::stream::converter::read</a>(data, length);</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> m_hash.hash(data, num_read);</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">return</span> num_read;</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> }</div>
</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> </div>
<div class="foldopen" id="foldopen00153" data-start="{" data-end="}">
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"><a class="line" href="classstdex_1_1stream__hasher.html#aea835790f7aba9fb6ad28363eaaf736b"> 153</a></span> <span class="keyword">virtual</span> _Success_(<span class="keywordflow">return</span> != 0) size_t <a class="code hl_function" href="classstdex_1_1stream__hasher.html#aea835790f7aba9fb6ad28363eaaf736b">write</a>(</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> _In_reads_bytes_opt_(length) const <span class="keywordtype">void</span>* data, _In_ <span class="keywordtype">size_t</span> length)</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> {</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordtype">size_t</span> num_written = <a class="code hl_function" href="classstdex_1_1stream_1_1converter.html#ae84a5c8d64942dbaa81ed54a181b3d7a">stdex::stream::converter::write</a>(data, length);</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> m_hash.hash(data, num_written);</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">return</span> num_written;</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> }</div>
</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> </div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <a class="code hl_class" href="classstdex_1_1basic__hash.html">basic_hash&lt;T&gt;</a>&amp; m_hash;</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> };</div>
</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">using </span>crc32_t = uint32_t;</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> </div>
<div class="foldopen" id="foldopen00173" data-start="{" data-end="};">
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"><a class="line" href="classstdex_1_1crc32__hash.html"> 173</a></span> <span class="keyword">class </span><a class="code hl_class" href="classstdex_1_1crc32__hash.html">crc32_hash</a> : <span class="keyword">public</span> <a class="code hl_class" href="classstdex_1_1basic__hash.html">basic_hash</a>&lt;crc32_t&gt;</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> {</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <a class="code hl_class" href="classstdex_1_1crc32__hash.html">crc32_hash</a>(crc32_t crc = 0)</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> {</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> m_value = ~crc;</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> }</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
<div class="foldopen" id="foldopen00181" data-start="{" data-end="}">
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"><a class="line" href="classstdex_1_1crc32__hash.html#addf745566fe5a1ba3f947a70603ea235"> 181</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1crc32__hash.html#addf745566fe5a1ba3f947a70603ea235">clear</a>()</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> {</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> m_value = 0xffffffff;</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> }</div>
</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> </div>
<div class="foldopen" id="foldopen00186" data-start="{" data-end="}">
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"><a class="line" href="classstdex_1_1crc32__hash.html#a682468b5c1e7fe3405e960c7d85daa8c"> 186</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1crc32__hash.html#a682468b5c1e7fe3405e960c7d85daa8c">hash</a>(_In_reads_bytes_opt_(length) <span class="keyword">const</span> <span class="keywordtype">void</span>* <a class="code hl_function" href="classstdex_1_1basic__hash.html#a00c5ecc12bc29e5381743fa2239a1dc3">data</a>, _In_ <span class="keywordtype">size_t</span> length)</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> {</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keyword">static</span> <span class="keyword">const</span> uint32_t crc32_table[256] = {</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> 0x2d02ef8d</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> };</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> </div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> stdex_assert(<a class="code hl_function" href="classstdex_1_1basic__hash.html#a00c5ecc12bc29e5381743fa2239a1dc3">data</a> || !length);</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; length; i++)</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> m_value = crc32_table[(m_value ^ <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(<a class="code hl_function" href="classstdex_1_1basic__hash.html#a00c5ecc12bc29e5381743fa2239a1dc3">data</a>)[i]) &amp; 0xff] ^ (m_value &gt;&gt; 8);</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> }</div>
</div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> </div>
<div class="foldopen" id="foldopen00248" data-start="{" data-end="}">
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"><a class="line" href="classstdex_1_1crc32__hash.html#a04aeb2009f5e615481752757b9ec0731"> 248</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1crc32__hash.html#a04aeb2009f5e615481752757b9ec0731">finalize</a>()</div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> {</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> m_value = ~m_value;</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> }</div>
</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> };</div>
</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> </div>
<div class="foldopen" id="foldopen00257" data-start="{" data-end="};">
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"><a class="line" href="unionstdex_1_1md2__t.html"> 257</a></span> <span class="keyword">union </span><a class="code hl_union" href="unionstdex_1_1md2__t.html">md2_t</a></div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> {</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> uint8_t data8[16];</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> uint32_t data32[4];</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> </div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <span class="keywordtype">bool</span> operator !=(_In_ <span class="keyword">const</span> <a class="code hl_union" href="unionstdex_1_1md2__t.html">stdex::md2_t</a>&amp; other)<span class="keyword"> const</span></div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">return</span></div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> (data32[0] ^ other.data32[0]) |</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> (data32[1] ^ other.data32[1]) |</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> (data32[2] ^ other.data32[2]) |</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> (data32[3] ^ other.data32[3]);</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> }</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> </div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> <span class="keywordtype">bool</span> operator ==(_In_ <span class="keyword">const</span> <a class="code hl_union" href="unionstdex_1_1md2__t.html">stdex::md2_t</a>&amp; other)<span class="keyword"> const</span></div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">return</span> !operator !=(other);</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> }</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> </div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="keyword">friend</span> <span class="keyword">inline</span> <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; operator &gt;&gt;(_Inout_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; stream, _Out_ <a class="code hl_union" href="unionstdex_1_1md2__t.html">stdex::md2_t</a>&amp; data)</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> {</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">if</span> (!stream.ok()) _Unlikely_{</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> memset(&amp;data, 0, <span class="keyword">sizeof</span>(data));</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> }</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> stream.read_array(&amp;data, <span class="keyword">sizeof</span>(data), 1);</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> }</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> </div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keyword">friend</span> <span class="keyword">inline</span> <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; operator &lt;&lt;(_Inout_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; stream, _In_ <span class="keyword">const</span> <a class="code hl_union" href="unionstdex_1_1md2__t.html">stdex::md2_t</a>&amp; data)</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> {</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">if</span> (!stream.ok()) _Unlikely_ <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> stream.write_array(&amp;data, <span class="keyword">sizeof</span>(data), 1);</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> }</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> };</div>
</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> </div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keyword">using </span><a class="code hl_union" href="unionstdex_1_1md2__t.html">md5_t</a> = <a class="code hl_union" href="unionstdex_1_1md2__t.html">md2_t</a>;</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> </div>
<div class="foldopen" id="foldopen00302" data-start="{" data-end="};">
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"><a class="line" href="classstdex_1_1md5__hash.html"> 302</a></span> <span class="keyword">class </span><a class="code hl_class" href="classstdex_1_1md5__hash.html">md5_hash</a> : <span class="keyword">public</span> <a class="code hl_class" href="classstdex_1_1block__hash.html">block_hash</a>&lt;md5_t&gt;</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> {</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> <a class="code hl_class" href="classstdex_1_1md5__hash.html">md5_hash</a>()</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> {</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> <a class="code hl_function" href="classstdex_1_1md5__hash.html#a0952042043c10e184d9ee8a79421cc0f">clear</a>();</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> }</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> </div>
<div class="foldopen" id="foldopen00310" data-start="{" data-end="}">
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"><a class="line" href="classstdex_1_1md5__hash.html#a0952042043c10e184d9ee8a79421cc0f"> 310</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1md5__hash.html#a0952042043c10e184d9ee8a79421cc0f">clear</a>()</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> {</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <a class="code hl_function" href="classstdex_1_1block__hash.html#a8750f9c24cd22bd879dc638256534aec">block_hash::clear</a>();</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> m_state[0] = 0x67452301;</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> m_state[1] = 0xefcdab89;</div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> m_state[2] = 0x98badcfe;</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> m_state[3] = 0x10325476;</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> }</div>
</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> </div>
<div class="foldopen" id="foldopen00319" data-start="{" data-end="}">
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"><a class="line" href="classstdex_1_1md5__hash.html#ab72e50dfa280696db29143b063fccbcb"> 319</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1md5__hash.html#ab72e50dfa280696db29143b063fccbcb">finalize</a>()</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> {</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="keyword">static</span> <span class="keyword">const</span> uint8_t md5_padding[64] = {</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> };</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> </div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> <span class="comment">// Save number of final.</span></div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> uint8_t <span class="keyword">final</span>[8];</div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> memcpy(<span class="keyword">final</span>, m_counter, <span class="keyword">sizeof</span>(m_counter));</div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> </div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> <span class="comment">// Pad out to 56 mod 64.</span></div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> <span class="keywordtype">size_t</span> index = (m_counter[0] &gt;&gt; 3) &amp; 0x3f;</div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <span class="keywordtype">size_t</span> remainder = index &lt; 56 ? 56 - index : 120 - index;</div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> <a class="code hl_function" href="classstdex_1_1block__hash.html#a463399ef0ec15ec0be0040ffa16afbbb">hash</a>(md5_padding, remainder);</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> </div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="comment">// Append length (before padding).</span></div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <a class="code hl_function" href="classstdex_1_1block__hash.html#a463399ef0ec15ec0be0040ffa16afbbb">hash</a>(<span class="keyword">final</span>, 8);</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> </div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="comment">// Store m_state in m_value.</span></div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> memcpy(&amp;m_value, m_state, <span class="keyword">sizeof</span>(<a class="code hl_union" href="unionstdex_1_1md2__t.html">md5_t</a>));</div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> }</div>
</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> </div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> hash_block()</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> {</div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> S11 = 7;</div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> S12 = 12;</div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> S13 = 17;</div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> S14 = 22;</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> S21 = 5;</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> S22 = 9;</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> S23 = 14;</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> S24 = 20;</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> S31 = 4;</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> S32 = 11;</div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> S33 = 16;</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> S34 = 23;</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> S41 = 6;</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> S42 = 10;</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> S43 = 15;</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> S44 = 21;</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> </div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> <span class="comment">// Copy m_state[] to working vars.</span></div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> uint32_t a = m_state[0], b = m_state[1], c = m_state[2], d = m_state[3];</div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> </div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> <span class="comment">// MD5 rounds</span></div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span><span class="preprocessor"> #define MD5_R1(a, b, c, d, i, s, ac) { (a) += (((b) &amp; (c)) | ((~b) &amp; (d))) + m_temp[(i)] + static_cast&lt;uint32_t&gt;(ac); (a) = rol((a), (s)); (a) += (b); }</span></div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span><span class="preprocessor"> #define MD5_R2(a, b, c, d, i, s, ac) { (a) += (((b) &amp; (d)) | ((c) &amp; (~d))) + m_temp[(i)] + static_cast&lt;uint32_t&gt;(ac); (a) = rol((a), (s)); (a) += (b); }</span></div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span><span class="preprocessor"> #define MD5_R3(a, b, c, d, i, s, ac) { (a) += ((b) ^ (c) ^ (d)) + m_temp[(i)] + static_cast&lt;uint32_t&gt;(ac); (a) = rol((a), (s)); (a) += (b); }</span></div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span><span class="preprocessor"> #define MD5_R4(a, b, c, d, i, s, ac) { (a) += ((c) ^ ((b) | (~d))) + m_temp[(i)] + static_cast&lt;uint32_t&gt;(ac); (a) = rol((a), (s)); (a) += (b); }</span></div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> </div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> <span class="comment">// 4 rounds of 16 operations each. Loop unrolled.</span></div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> MD5_R1(a, b, c, d, 0, S11, 0xd76aa478);</div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> MD5_R1(d, a, b, c, 1, S12, 0xe8c7b756);</div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> MD5_R1(c, d, a, b, 2, S13, 0x242070db);</div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> MD5_R1(b, c, d, a, 3, S14, 0xc1bdceee);</div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> MD5_R1(a, b, c, d, 4, S11, 0xf57c0faf);</div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> MD5_R1(d, a, b, c, 5, S12, 0x4787c62a);</div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> MD5_R1(c, d, a, b, 6, S13, 0xa8304613);</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> MD5_R1(b, c, d, a, 7, S14, 0xfd469501);</div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> MD5_R1(a, b, c, d, 8, S11, 0x698098d8);</div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> MD5_R1(d, a, b, c, 9, S12, 0x8b44f7af);</div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> MD5_R1(c, d, a, b, 10, S13, 0xffff5bb1);</div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> MD5_R1(b, c, d, a, 11, S14, 0x895cd7be);</div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> MD5_R1(a, b, c, d, 12, S11, 0x6b901122);</div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> MD5_R1(d, a, b, c, 13, S12, 0xfd987193);</div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> MD5_R1(c, d, a, b, 14, S13, 0xa679438e);</div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> MD5_R1(b, c, d, a, 15, S14, 0x49b40821);</div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> MD5_R2(a, b, c, d, 1, S21, 0xf61e2562);</div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> MD5_R2(d, a, b, c, 6, S22, 0xc040b340);</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> MD5_R2(c, d, a, b, 11, S23, 0x265e5a51);</div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> MD5_R2(b, c, d, a, 0, S24, 0xe9b6c7aa);</div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> MD5_R2(a, b, c, d, 5, S21, 0xd62f105d);</div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> MD5_R2(d, a, b, c, 10, S22, 0x2441453);</div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> MD5_R2(c, d, a, b, 15, S23, 0xd8a1e681);</div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> MD5_R2(b, c, d, a, 4, S24, 0xe7d3fbc8);</div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> MD5_R2(a, b, c, d, 9, S21, 0x21e1cde6);</div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> MD5_R2(d, a, b, c, 14, S22, 0xc33707d6);</div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> MD5_R2(c, d, a, b, 3, S23, 0xf4d50d87);</div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> MD5_R2(b, c, d, a, 8, S24, 0x455a14ed);</div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> MD5_R2(a, b, c, d, 13, S21, 0xa9e3e905);</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> MD5_R2(d, a, b, c, 2, S22, 0xfcefa3f8);</div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> MD5_R2(c, d, a, b, 7, S23, 0x676f02d9);</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> MD5_R2(b, c, d, a, 12, S24, 0x8d2a4c8a);</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> MD5_R3(a, b, c, d, 5, S31, 0xfffa3942);</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> MD5_R3(d, a, b, c, 8, S32, 0x8771f681);</div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> MD5_R3(c, d, a, b, 11, S33, 0x6d9d6122);</div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> MD5_R3(b, c, d, a, 14, S34, 0xfde5380c);</div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> MD5_R3(a, b, c, d, 1, S31, 0xa4beea44);</div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> MD5_R3(d, a, b, c, 4, S32, 0x4bdecfa9);</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> MD5_R3(c, d, a, b, 7, S33, 0xf6bb4b60);</div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> MD5_R3(b, c, d, a, 10, S34, 0xbebfbc70);</div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> MD5_R3(a, b, c, d, 13, S31, 0x289b7ec6);</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> MD5_R3(d, a, b, c, 0, S32, 0xeaa127fa);</div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> MD5_R3(c, d, a, b, 3, S33, 0xd4ef3085);</div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> MD5_R3(b, c, d, a, 6, S34, 0x4881d05);</div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> MD5_R3(a, b, c, d, 9, S31, 0xd9d4d039);</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> MD5_R3(d, a, b, c, 12, S32, 0xe6db99e5);</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> MD5_R3(c, d, a, b, 15, S33, 0x1fa27cf8);</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> MD5_R3(b, c, d, a, 2, S34, 0xc4ac5665);</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> MD5_R4(a, b, c, d, 0, S41, 0xf4292244);</div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> MD5_R4(d, a, b, c, 7, S42, 0x432aff97);</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> MD5_R4(c, d, a, b, 14, S43, 0xab9423a7);</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> MD5_R4(b, c, d, a, 5, S44, 0xfc93a039);</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> MD5_R4(a, b, c, d, 12, S41, 0x655b59c3);</div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> MD5_R4(d, a, b, c, 3, S42, 0x8f0ccc92);</div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> MD5_R4(c, d, a, b, 10, S43, 0xffeff47d);</div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> MD5_R4(b, c, d, a, 1, S44, 0x85845dd1);</div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> MD5_R4(a, b, c, d, 8, S41, 0x6fa87e4f);</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> MD5_R4(d, a, b, c, 15, S42, 0xfe2ce6e0);</div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> MD5_R4(c, d, a, b, 6, S43, 0xa3014314);</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> MD5_R4(b, c, d, a, 13, S44, 0x4e0811a1);</div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> MD5_R4(a, b, c, d, 4, S41, 0xf7537e82);</div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> MD5_R4(d, a, b, c, 11, S42, 0xbd3af235);</div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> MD5_R4(c, d, a, b, 2, S43, 0x2ad7d2bb);</div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> MD5_R4(b, c, d, a, 9, S44, 0xeb86d391);</div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> </div>
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span><span class="preprocessor"> #undef MD5_R1</span></div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span><span class="preprocessor"> #undef MD5_R2</span></div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span><span class="preprocessor"> #undef MD5_R3</span></div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span><span class="preprocessor"> #undef MD5_R4</span></div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> </div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> <span class="comment">// Add the working vars back into internal state.</span></div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> m_state[0] += a;</div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> m_state[1] += b;</div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> m_state[2] += c;</div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> m_state[3] += d;</div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> }</div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> </div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> uint32_t m_state[4];</div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> };</div>
</div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> </div>
<div class="foldopen" id="foldopen00457" data-start="{" data-end="};">
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"><a class="line" href="unionstdex_1_1sha__t.html"> 457</a></span> <span class="keyword">union </span><a class="code hl_union" href="unionstdex_1_1sha__t.html">sha_t</a></div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> {</div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> uint8_t data8[20];</div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> uint32_t data32[5];</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> </div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> <span class="keywordtype">bool</span> operator !=(_In_ <span class="keyword">const</span> <a class="code hl_union" href="unionstdex_1_1sha__t.html">stdex::sha_t</a>&amp; other)<span class="keyword"> const</span></div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> <span class="keywordflow">return</span></div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> (data32[0] ^ other.data32[0]) |</div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> (data32[1] ^ other.data32[1]) |</div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> (data32[2] ^ other.data32[2]) |</div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> (data32[3] ^ other.data32[3]) |</div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> (data32[4] ^ other.data32[4]);</div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> }</div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> </div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> <span class="keywordtype">bool</span> operator ==(_In_ <span class="keyword">const</span> <a class="code hl_union" href="unionstdex_1_1sha__t.html">stdex::sha_t</a>&amp; other)<span class="keyword"> const</span></div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> <span class="keywordflow">return</span> !operator !=(other);</div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> }</div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> </div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> <span class="keyword">friend</span> <span class="keyword">inline</span> <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; operator &gt;&gt;(_Inout_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; stream, _Out_ <a class="code hl_union" href="unionstdex_1_1sha__t.html">stdex::sha_t</a>&amp; data)</div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> {</div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> <span class="keywordflow">if</span> (!stream.ok()) _Unlikely_{</div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> memset(&amp;data, 0, <span class="keyword">sizeof</span>(data));</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> }</div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> stream.read_array(&amp;data, <span class="keyword">sizeof</span>(data), 1);</div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> }</div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> </div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> <span class="keyword">friend</span> <span class="keyword">inline</span> <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; operator &lt;&lt;(_Inout_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; stream, _In_ <span class="keyword">const</span> <a class="code hl_union" href="unionstdex_1_1sha__t.html">stdex::sha_t</a> data)</div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> {</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">if</span> (!stream.ok()) _Unlikely_ <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> stream.write_array(&amp;data, <span class="keyword">sizeof</span>(data), 1);</div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> }</div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> };</div>
</div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> </div>
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> <span class="keyword">using </span><a class="code hl_union" href="unionstdex_1_1sha__t.html">sha1_t</a> = <a class="code hl_union" href="unionstdex_1_1sha__t.html">sha_t</a>;</div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> </div>
<div class="foldopen" id="foldopen00503" data-start="{" data-end="};">
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"><a class="line" href="classstdex_1_1sha1__hash.html"> 503</a></span> <span class="keyword">class </span><a class="code hl_class" href="classstdex_1_1sha1__hash.html">sha1_hash</a> : <span class="keyword">public</span> <a class="code hl_class" href="classstdex_1_1block__hash.html">block_hash</a>&lt;sha1_t&gt;</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> {</div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> <a class="code hl_class" href="classstdex_1_1sha1__hash.html">sha1_hash</a>()</div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> {</div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> <a class="code hl_function" href="classstdex_1_1sha1__hash.html#a36f38887f8e90f88df0a420f0011b9b3">clear</a>();</div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> }</div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> </div>
<div class="foldopen" id="foldopen00511" data-start="{" data-end="}">
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"><a class="line" href="classstdex_1_1sha1__hash.html#a36f38887f8e90f88df0a420f0011b9b3"> 511</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1sha1__hash.html#a36f38887f8e90f88df0a420f0011b9b3">clear</a>()</div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> {</div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> <a class="code hl_function" href="classstdex_1_1block__hash.html#a8750f9c24cd22bd879dc638256534aec">block_hash::clear</a>();</div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> </div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> <span class="comment">// SHA1 initialization constants</span></div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> m_state[0] = 0x67452301;</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> m_state[1] = 0xEFCDAB89;</div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> m_state[2] = 0x98BADCFE;</div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> m_state[3] = 0x10325476;</div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> m_state[4] = 0xC3D2E1F0;</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> }</div>
</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> </div>
<div class="foldopen" id="foldopen00523" data-start="{" data-end="}">
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"><a class="line" href="classstdex_1_1sha1__hash.html#aaf5f58e8b62d19d1fcc80b4f73f9ca8d"> 523</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1sha1__hash.html#aaf5f58e8b62d19d1fcc80b4f73f9ca8d">finalize</a>()</div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> {</div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> <span class="comment">// Save number of final.</span></div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> uint8_t <span class="keyword">final</span>[8];</div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; 8; i++)</div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> <span class="keyword">final</span>[i] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>((m_counter[((i &gt;= 4) ? 0 : 1)] &gt;&gt; ((3 - (i &amp; 3)) * 8)) &amp; 255); <span class="comment">// Endian independent</span></div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> </div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> <a class="code hl_function" href="classstdex_1_1block__hash.html#a463399ef0ec15ec0be0040ffa16afbbb">hash</a>(<span class="stringliteral">&quot;\200&quot;</span>, 1);</div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> <span class="keywordflow">while</span> ((m_counter[0] &amp; 504) != 448)</div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> <a class="code hl_function" href="classstdex_1_1block__hash.html#a463399ef0ec15ec0be0040ffa16afbbb">hash</a>(<span class="stringliteral">&quot;\0&quot;</span>, 1);</div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> <a class="code hl_function" href="classstdex_1_1block__hash.html#a463399ef0ec15ec0be0040ffa16afbbb">hash</a>(<span class="keyword">final</span>, 8); <span class="comment">// Cause a SHA1Transform()</span></div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> </div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> <span class="comment">// Store m_state in m_value.</span></div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; 20; i++)</div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> m_value.data8[i] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>((m_state[i &gt;&gt; 2] &gt;&gt; ((3 - (i &amp; 3)) * 8)) &amp; 255);</div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> }</div>
</div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> </div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> hash_block()</div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> {</div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> <span class="comment">// Copy m_state[] to working vars.</span></div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> uint32_t a = m_state[0], b = m_state[1], c = m_state[2], d = m_state[3], e = m_state[4];</div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> </div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span><span class="preprocessor">#if BYTE_ORDER == BIG_ENDIAN</span></div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span><span class="preprocessor"> #define SHA1BLK0(i) (m_temp[i])</span></div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span><span class="preprocessor"> #define SHA1BLK0(i) (m_temp[i] = (rol(m_temp[i],24) &amp; 0xFF00FF00) | (rol(m_temp[i],8) &amp; 0x00FF00FF))</span></div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span><span class="preprocessor"> #define SHA1BLK(i) (m_temp[i&amp;15] = rol(m_temp[(i+13)&amp;15] ^ m_temp[(i+8)&amp;15] ^ m_temp[(i+2)&amp;15] ^ m_temp[i&amp;15],1))</span></div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> </div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> <span class="comment">// SHA1 rounds</span></div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span><span class="preprocessor"> #define SHA1_R0(v, w, x, y, z, i) { (z) += (((w)&amp;((x)^(y)))^(y))+SHA1BLK0((i))+0x5A827999+rol((v),5); (w)=rol((w),30); }</span></div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span><span class="preprocessor"> #define SHA1_R1(v, w, x, y, z, i) { (z) += (((w)&amp;((x)^(y)))^(y))+SHA1BLK((i))+0x5A827999+rol((v),5); (w)=rol((w),30); }</span></div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span><span class="preprocessor"> #define SHA1_R2(v, w, x, y, z, i) { (z) += ((w)^(x)^(y))+SHA1BLK((i))+0x6ED9EBA1+rol((v),5); (w)=rol((w),30); }</span></div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span><span class="preprocessor"> #define SHA1_R3(v, w, x, y, z, i) { (z) += ((((w)|(x))&amp;(y))|((w)&amp;(x)))+SHA1BLK((i))+0x8F1BBCDC+rol((v),5); (w)=rol((w),30); }</span></div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span><span class="preprocessor"> #define SHA1_R4(v, w, x, y, z, i) { (z) += ((w)^(x)^(y))+SHA1BLK((i))+0xCA62C1D6+rol((v),5); (w)=rol((w),30); }</span></div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> </div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> <span class="comment">// 5 rounds of 16 operations each. Loop unrolled.</span></div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> SHA1_R0(a, b, c, d, e, 0); SHA1_R0(e, a, b, c, d, 1); SHA1_R0(d, e, a, b, c, 2); SHA1_R0(c, d, e, a, b, 3);</div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> SHA1_R0(b, c, d, e, a, 4); SHA1_R0(a, b, c, d, e, 5); SHA1_R0(e, a, b, c, d, 6); SHA1_R0(d, e, a, b, c, 7);</div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> SHA1_R0(c, d, e, a, b, 8); SHA1_R0(b, c, d, e, a, 9); SHA1_R0(a, b, c, d, e, 10); SHA1_R0(e, a, b, c, d, 11);</div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> SHA1_R0(d, e, a, b, c, 12); SHA1_R0(c, d, e, a, b, 13); SHA1_R0(b, c, d, e, a, 14); SHA1_R0(a, b, c, d, e, 15);</div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> SHA1_R1(e, a, b, c, d, 16); SHA1_R1(d, e, a, b, c, 17); SHA1_R1(c, d, e, a, b, 18); SHA1_R1(b, c, d, e, a, 19);</div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> SHA1_R2(a, b, c, d, e, 20); SHA1_R2(e, a, b, c, d, 21); SHA1_R2(d, e, a, b, c, 22); SHA1_R2(c, d, e, a, b, 23);</div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> SHA1_R2(b, c, d, e, a, 24); SHA1_R2(a, b, c, d, e, 25); SHA1_R2(e, a, b, c, d, 26); SHA1_R2(d, e, a, b, c, 27);</div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> SHA1_R2(c, d, e, a, b, 28); SHA1_R2(b, c, d, e, a, 29); SHA1_R2(a, b, c, d, e, 30); SHA1_R2(e, a, b, c, d, 31);</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> SHA1_R2(d, e, a, b, c, 32); SHA1_R2(c, d, e, a, b, 33); SHA1_R2(b, c, d, e, a, 34); SHA1_R2(a, b, c, d, e, 35);</div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> SHA1_R2(e, a, b, c, d, 36); SHA1_R2(d, e, a, b, c, 37); SHA1_R2(c, d, e, a, b, 38); SHA1_R2(b, c, d, e, a, 39);</div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> SHA1_R3(a, b, c, d, e, 40); SHA1_R3(e, a, b, c, d, 41); SHA1_R3(d, e, a, b, c, 42); SHA1_R3(c, d, e, a, b, 43);</div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> SHA1_R3(b, c, d, e, a, 44); SHA1_R3(a, b, c, d, e, 45); SHA1_R3(e, a, b, c, d, 46); SHA1_R3(d, e, a, b, c, 47);</div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> SHA1_R3(c, d, e, a, b, 48); SHA1_R3(b, c, d, e, a, 49); SHA1_R3(a, b, c, d, e, 50); SHA1_R3(e, a, b, c, d, 51);</div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> SHA1_R3(d, e, a, b, c, 52); SHA1_R3(c, d, e, a, b, 53); SHA1_R3(b, c, d, e, a, 54); SHA1_R3(a, b, c, d, e, 55);</div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> SHA1_R3(e, a, b, c, d, 56); SHA1_R3(d, e, a, b, c, 57); SHA1_R3(c, d, e, a, b, 58); SHA1_R3(b, c, d, e, a, 59);</div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> SHA1_R4(a, b, c, d, e, 60); SHA1_R4(e, a, b, c, d, 61); SHA1_R4(d, e, a, b, c, 62); SHA1_R4(c, d, e, a, b, 63);</div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> SHA1_R4(b, c, d, e, a, 64); SHA1_R4(a, b, c, d, e, 65); SHA1_R4(e, a, b, c, d, 66); SHA1_R4(d, e, a, b, c, 67);</div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> SHA1_R4(c, d, e, a, b, 68); SHA1_R4(b, c, d, e, a, 69); SHA1_R4(a, b, c, d, e, 70); SHA1_R4(e, a, b, c, d, 71);</div>
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> SHA1_R4(d, e, a, b, c, 72); SHA1_R4(c, d, e, a, b, 73); SHA1_R4(b, c, d, e, a, 74); SHA1_R4(a, b, c, d, e, 75);</div>
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> SHA1_R4(e, a, b, c, d, 76); SHA1_R4(d, e, a, b, c, 77); SHA1_R4(c, d, e, a, b, 78); SHA1_R4(b, c, d, e, a, 79);</div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> </div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> <span class="comment">// Add the working vars back into m_state.</span></div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> m_state[0] += a;</div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> m_state[1] += b;</div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> m_state[2] += c;</div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> m_state[3] += d;</div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> m_state[4] += e;</div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> </div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span><span class="preprocessor"> #undef SHA1_R0</span></div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span><span class="preprocessor"> #undef SHA1_R1</span></div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span><span class="preprocessor"> #undef SHA1_R2</span></div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span><span class="preprocessor"> #undef SHA1_R3</span></div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span><span class="preprocessor"> #undef SHA1_R4</span></div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span><span class="preprocessor"> #undef SHA1BLK0</span></div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span><span class="preprocessor"> #undef SHA1BLK0</span></div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span><span class="preprocessor"> #undef SHA1BLK</span></div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> }</div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> </div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> uint32_t m_state[5];</div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> };</div>
</div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> </div>
<div class="foldopen" id="foldopen00606" data-start="{" data-end="};">
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"><a class="line" href="unionstdex_1_1sha256__t.html"> 606</a></span> <span class="keyword">union </span><a class="code hl_union" href="unionstdex_1_1sha256__t.html">sha256_t</a></div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> {</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> uint8_t data8[32];</div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> uint32_t data32[8];</div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> </div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> <span class="keywordtype">bool</span> operator !=(_In_ <span class="keyword">const</span> <a class="code hl_union" href="unionstdex_1_1sha256__t.html">stdex::sha256_t</a>&amp; other)<span class="keyword"> const</span></div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> <span class="keywordflow">return</span></div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> (data32[0] ^ other.data32[0]) |</div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> (data32[1] ^ other.data32[1]) |</div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> (data32[2] ^ other.data32[2]) |</div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> (data32[3] ^ other.data32[3]) |</div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> (data32[4] ^ other.data32[4]) |</div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> (data32[5] ^ other.data32[5]) |</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> (data32[6] ^ other.data32[6]) |</div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> (data32[7] ^ other.data32[7]);</div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> }</div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> </div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> <span class="keywordtype">bool</span> operator ==(_In_ <span class="keyword">const</span> <a class="code hl_union" href="unionstdex_1_1sha256__t.html">stdex::sha256_t</a>&amp; other)<span class="keyword"> const</span></div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> <span class="keywordflow">return</span> !operator !=(other);</div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> }</div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> </div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> <span class="keyword">friend</span> <span class="keyword">inline</span> <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; operator &gt;&gt;(_Inout_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; stream, _Out_ <a class="code hl_union" href="unionstdex_1_1sha256__t.html">stdex::sha256_t</a>&amp; data)</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> {</div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> <span class="keywordflow">if</span> (!stream.ok()) _Unlikely_{</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> memset(&amp;data, 0, <span class="keyword">sizeof</span>(data));</div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> }</div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> stream.read_array(&amp;data, <span class="keyword">sizeof</span>(data), 1);</div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> }</div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> </div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> <span class="keyword">friend</span> <span class="keyword">inline</span> <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; operator &lt;&lt;(_Inout_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; stream, _In_ <span class="keyword">const</span> <a class="code hl_union" href="unionstdex_1_1sha256__t.html">stdex::sha256_t</a>&amp; data)</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> {</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> <span class="keywordflow">if</span> (!stream.ok()) _Unlikely_ <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> stream.write_array(&amp;data, <span class="keyword">sizeof</span>(data), 1);</div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> }</div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> };</div>
</div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span>}</div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span> </div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span><span class="preprocessor">#if defined(__GNUC__)</span></div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span><span class="preprocessor">#pragma GCC diagnostic pop</span></div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span><span class="preprocessor">#endif</span></div>
<div class="ttc" id="aclassstdex_1_1basic__hash_html"><div class="ttname"><a href="classstdex_1_1basic__hash.html">stdex::basic_hash</a></div><div class="ttdoc">Basic hashing operations.</div><div class="ttdef"><b>Definition</b> hash.hpp:29</div></div>
<div class="ttc" id="aclassstdex_1_1basic__hash_html_a00c5ecc12bc29e5381743fa2239a1dc3"><div class="ttname"><a href="classstdex_1_1basic__hash.html#a00c5ecc12bc29e5381743fa2239a1dc3">stdex::basic_hash::data</a></div><div class="ttdeci">const T &amp; data()</div><div class="ttdoc">Returns hash value.</div><div class="ttdef"><b>Definition</b> hash.hpp:59</div></div>
<div class="ttc" id="aclassstdex_1_1basic__hash_html_a198a7f9e606ac26dbd5a345108e5efc9"><div class="ttname"><a href="classstdex_1_1basic__hash.html#a198a7f9e606ac26dbd5a345108e5efc9">stdex::basic_hash::hash</a></div><div class="ttdeci">virtual void hash(_In_reads_bytes_opt_(length) const void *data, size_t length)=0</div><div class="ttdoc">Hashes block of data.</div></div>
<div class="ttc" id="aclassstdex_1_1basic__hash_html_a9b8b5f91873e5d2cfe93533832318b5a"><div class="ttname"><a href="classstdex_1_1basic__hash.html#a9b8b5f91873e5d2cfe93533832318b5a">stdex::basic_hash::size</a></div><div class="ttdeci">static size_t size()</div><div class="ttdoc">Returns size of the hash value in bytes.</div><div class="ttdef"><b>Definition</b> hash.hpp:54</div></div>
<div class="ttc" id="aclassstdex_1_1basic__hash_html_ab2f4729c60bbb2ce12d5100be26108cf"><div class="ttname"><a href="classstdex_1_1basic__hash.html#ab2f4729c60bbb2ce12d5100be26108cf">stdex::basic_hash::finalize</a></div><div class="ttdeci">virtual void finalize()=0</div><div class="ttdoc">Finalizes hash value.</div></div>
<div class="ttc" id="aclassstdex_1_1basic__hash_html_af5e2ff7b83da5a663fa3c9766734b771"><div class="ttname"><a href="classstdex_1_1basic__hash.html#af5e2ff7b83da5a663fa3c9766734b771">stdex::basic_hash::clear</a></div><div class="ttdeci">virtual void clear()=0</div><div class="ttdoc">Initializes hash value and internal state.</div></div>
<div class="ttc" id="aclassstdex_1_1block__hash_html"><div class="ttname"><a href="classstdex_1_1block__hash.html">stdex::block_hash</a></div><div class="ttdoc">Hashing in blocks.</div><div class="ttdef"><b>Definition</b> hash.hpp:75</div></div>
<div class="ttc" id="aclassstdex_1_1block__hash_html_a463399ef0ec15ec0be0040ffa16afbbb"><div class="ttname"><a href="classstdex_1_1block__hash.html#a463399ef0ec15ec0be0040ffa16afbbb">stdex::block_hash::hash</a></div><div class="ttdeci">virtual void hash(_In_reads_bytes_opt_(length) const void *data, size_t length)</div><div class="ttdoc">Hashes block of data.</div><div class="ttdef"><b>Definition</b> hash.hpp:82</div></div>
<div class="ttc" id="aclassstdex_1_1block__hash_html_a8750f9c24cd22bd879dc638256534aec"><div class="ttname"><a href="classstdex_1_1block__hash.html#a8750f9c24cd22bd879dc638256534aec">stdex::block_hash::clear</a></div><div class="ttdeci">virtual void clear()</div><div class="ttdoc">Initializes hash value and internal state.</div><div class="ttdef"><b>Definition</b> hash.hpp:77</div></div>
<div class="ttc" id="aclassstdex_1_1crc32__hash_html"><div class="ttname"><a href="classstdex_1_1crc32__hash.html">stdex::crc32_hash</a></div><div class="ttdoc">Hashes as CRC32.</div><div class="ttdef"><b>Definition</b> hash.hpp:174</div></div>
<div class="ttc" id="aclassstdex_1_1crc32__hash_html_a04aeb2009f5e615481752757b9ec0731"><div class="ttname"><a href="classstdex_1_1crc32__hash.html#a04aeb2009f5e615481752757b9ec0731">stdex::crc32_hash::finalize</a></div><div class="ttdeci">virtual void finalize()</div><div class="ttdoc">Finalizes hash value.</div><div class="ttdef"><b>Definition</b> hash.hpp:248</div></div>
<div class="ttc" id="aclassstdex_1_1crc32__hash_html_a682468b5c1e7fe3405e960c7d85daa8c"><div class="ttname"><a href="classstdex_1_1crc32__hash.html#a682468b5c1e7fe3405e960c7d85daa8c">stdex::crc32_hash::hash</a></div><div class="ttdeci">virtual void hash(_In_reads_bytes_opt_(length) const void *data, size_t length)</div><div class="ttdoc">Hashes block of data.</div><div class="ttdef"><b>Definition</b> hash.hpp:186</div></div>
<div class="ttc" id="aclassstdex_1_1crc32__hash_html_addf745566fe5a1ba3f947a70603ea235"><div class="ttname"><a href="classstdex_1_1crc32__hash.html#addf745566fe5a1ba3f947a70603ea235">stdex::crc32_hash::clear</a></div><div class="ttdeci">virtual void clear()</div><div class="ttdoc">Initializes hash value and internal state.</div><div class="ttdef"><b>Definition</b> hash.hpp:181</div></div>
<div class="ttc" id="aclassstdex_1_1md5__hash_html"><div class="ttname"><a href="classstdex_1_1md5__hash.html">stdex::md5_hash</a></div><div class="ttdoc">Hashes as MD5.</div><div class="ttdef"><b>Definition</b> hash.hpp:303</div></div>
<div class="ttc" id="aclassstdex_1_1md5__hash_html_a0952042043c10e184d9ee8a79421cc0f"><div class="ttname"><a href="classstdex_1_1md5__hash.html#a0952042043c10e184d9ee8a79421cc0f">stdex::md5_hash::clear</a></div><div class="ttdeci">virtual void clear()</div><div class="ttdoc">Initializes hash value and internal state.</div><div class="ttdef"><b>Definition</b> hash.hpp:310</div></div>
<div class="ttc" id="aclassstdex_1_1md5__hash_html_ab72e50dfa280696db29143b063fccbcb"><div class="ttname"><a href="classstdex_1_1md5__hash.html#ab72e50dfa280696db29143b063fccbcb">stdex::md5_hash::finalize</a></div><div class="ttdeci">virtual void finalize()</div><div class="ttdoc">Finalizes hash value.</div><div class="ttdef"><b>Definition</b> hash.hpp:319</div></div>
<div class="ttc" id="aclassstdex_1_1sha1__hash_html"><div class="ttname"><a href="classstdex_1_1sha1__hash.html">stdex::sha1_hash</a></div><div class="ttdoc">Hashes as SHA1.</div><div class="ttdef"><b>Definition</b> hash.hpp:504</div></div>
<div class="ttc" id="aclassstdex_1_1sha1__hash_html_a36f38887f8e90f88df0a420f0011b9b3"><div class="ttname"><a href="classstdex_1_1sha1__hash.html#a36f38887f8e90f88df0a420f0011b9b3">stdex::sha1_hash::clear</a></div><div class="ttdeci">virtual void clear()</div><div class="ttdoc">Initializes hash value and internal state.</div><div class="ttdef"><b>Definition</b> hash.hpp:511</div></div>
<div class="ttc" id="aclassstdex_1_1sha1__hash_html_aaf5f58e8b62d19d1fcc80b4f73f9ca8d"><div class="ttname"><a href="classstdex_1_1sha1__hash.html#aaf5f58e8b62d19d1fcc80b4f73f9ca8d">stdex::sha1_hash::finalize</a></div><div class="ttdeci">virtual void finalize()</div><div class="ttdoc">Finalizes hash value.</div><div class="ttdef"><b>Definition</b> hash.hpp:523</div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1basic_html"><div class="ttname"><a href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a></div><div class="ttdoc">UTF-8 byte-order-mark</div><div class="ttdef"><b>Definition</b> stream.hpp:85</div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1converter_html"><div class="ttname"><a href="classstdex_1_1stream_1_1converter.html">stdex::stream::converter</a></div><div class="ttdoc">Modifies data on the fly when reading from/writing to a source stream. Could also be used to modify r...</div><div class="ttdef"><b>Definition</b> stream.hpp:1023</div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1converter_html_abdca66af4847c6f8b6d87a0909fc061f"><div class="ttname"><a href="classstdex_1_1stream_1_1converter.html#abdca66af4847c6f8b6d87a0909fc061f">stdex::stream::converter::read</a></div><div class="ttdeci">virtual size_t read(_Out_writes_bytes_to_opt_(length, return) void *data, size_t length)</div><div class="ttdoc">Reads block of data from the stream.</div><div class="ttdef"><b>Definition</b> stream.hpp:1052</div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1converter_html_ae84a5c8d64942dbaa81ed54a181b3d7a"><div class="ttname"><a href="classstdex_1_1stream_1_1converter.html#ae84a5c8d64942dbaa81ed54a181b3d7a">stdex::stream::converter::write</a></div><div class="ttdeci">virtual size_t write(_In_reads_bytes_opt_(length) const void *data, size_t length)</div><div class="ttdoc">Writes block of data to the stream.</div><div class="ttdef"><b>Definition</b> stream.hpp:1060</div></div>
<div class="ttc" id="aclassstdex_1_1stream__hasher_html"><div class="ttname"><a href="classstdex_1_1stream__hasher.html">stdex::stream_hasher</a></div><div class="ttdoc">Hashes read to or write from data of the stream.</div><div class="ttdef"><b>Definition</b> hash.hpp:138</div></div>
<div class="ttc" id="aclassstdex_1_1stream__hasher_html_a9727f0c56f11978c2df6e31e8509a38b"><div class="ttname"><a href="classstdex_1_1stream__hasher.html#a9727f0c56f11978c2df6e31e8509a38b">stdex::stream_hasher::read</a></div><div class="ttdeci">virtual size_t read(_Out_writes_bytes_to_opt_(length, return) void *data, size_t length)</div><div class="ttdoc">Reads block of data from the stream.</div><div class="ttdef"><b>Definition</b> hash.hpp:145</div></div>
<div class="ttc" id="aclassstdex_1_1stream__hasher_html_aea835790f7aba9fb6ad28363eaaf736b"><div class="ttname"><a href="classstdex_1_1stream__hasher.html#aea835790f7aba9fb6ad28363eaaf736b">stdex::stream_hasher::write</a></div><div class="ttdeci">virtual size_t write(_In_reads_bytes_opt_(length) const void *data, size_t length)</div><div class="ttdoc">Writes block of data to the stream.</div><div class="ttdef"><b>Definition</b> hash.hpp:153</div></div>
<div class="ttc" id="aunionstdex_1_1md2__t_html"><div class="ttname"><a href="unionstdex_1_1md2__t.html">stdex::md2_t</a></div><div class="ttdoc">MD2 hash value.</div><div class="ttdef"><b>Definition</b> hash.hpp:258</div></div>
<div class="ttc" id="aunionstdex_1_1sha256__t_html"><div class="ttname"><a href="unionstdex_1_1sha256__t.html">stdex::sha256_t</a></div><div class="ttdoc">SHA256 hash value.</div><div class="ttdef"><b>Definition</b> hash.hpp:607</div></div>
<div class="ttc" id="aunionstdex_1_1sha__t_html"><div class="ttname"><a href="unionstdex_1_1sha__t.html">stdex::sha_t</a></div><div class="ttdoc">SHA hash value.</div><div class="ttdef"><b>Definition</b> hash.hpp:458</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Tue Jun 18 2024 14:58:40 for stdex by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.11.0
</small></address>
</div><!-- doc-content -->
</body>
</html>