1 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns=
"http://www.w3.org/1999/xhtml">
4 <meta http-equiv=
"Content-Type" content=
"text/xhtml;charset=UTF-8"/>
5 <meta http-equiv=
"X-UA-Compatible" content=
"IE=9"/>
6 <meta name=
"generator" content=
"Doxygen 1.8.12"/>
7 <meta name=
"viewport" content=
"width=device-width, initial-scale=1"/>
8 <title>MuldeR
's Utilities for Qt: include/MUtils/Hash.h Source File
</title>
9 <link href=
"../../tabs.css" rel=
"stylesheet" type=
"text/css"/>
10 <script type=
"text/javascript" src=
"../../jquery.js"></script>
11 <script type=
"text/javascript" src=
"../../dynsections.js"></script>
12 <link href=
"../../search/search.css" rel=
"stylesheet" type=
"text/css"/>
13 <script type=
"text/javascript" src=
"../../search/searchdata.js"></script>
14 <script type=
"text/javascript" src=
"../../search/search.js"></script>
15 <link href=
"../../doxygen.css" rel=
"stylesheet" type=
"text/css" />
18 <div id=
"top"><!-- do not remove this div, it is closed by doxygen! -->
20 <table cellspacing=
"0" cellpadding=
"0">
22 <tr style=
"height: 56px;">
23 <td id=
"projectalign" style=
"padding-left: 0.5em;">
24 <div id=
"projectname">MuldeR
's Utilities for Qt
26 <div id=
"projectbrief">MUtilities
</div>
32 <!-- end header part -->
33 <!-- Generated by Doxygen 1.8.12 -->
34 <script type=
"text/javascript">
35 var searchBox
= new SearchBox("searchBox", "../../search",false,'Search');
37 <script type=
"text/javascript" src=
"../../menudata.js"></script>
38 <script type=
"text/javascript" src=
"../../menu.js"></script>
39 <script type=
"text/javascript">
41 initMenu('../../',true,false,'search.php','Search');
42 $(document
).ready(function() { init_search(); });
45 <div id=
"main-nav"></div>
46 <!-- window showing the filter options -->
47 <div id=
"MSearchSelectWindow"
48 onmouseover=
"return searchBox.OnSearchSelectShow()"
49 onmouseout=
"return searchBox.OnSearchSelectHide()"
50 onkeydown=
"return searchBox.OnSearchSelectKey(event)">
53 <!-- iframe showing the search results (closed by default) -->
54 <div id=
"MSearchResultsWindow">
55 <iframe src=
"javascript:void(0)" frameborder=
"0"
56 name=
"MSearchResults" id=
"MSearchResults">
60 <div id=
"nav-path" class=
"navpath">
62 <li class=
"navelem"><a class=
"el" href=
"../../dir_d44c64559bbebec7f509842c48db8b23.html">include
</a></li><li class=
"navelem"><a class=
"el" href=
"../../dir_b076b53667bc06ebb413a190e197fc7b.html">MUtils
</a></li> </ul>
66 <div class=
"headertitle">
67 <div class=
"title">Hash.h
</div> </div>
69 <div class=
"contents">
70 <a href=
"../../d2/dad/_hash_8h.html">Go to the documentation of this file.
</a><div class=
"fragment"><div class=
"line"><a name=
"l00001"></a><span class=
"lineno"> 1</span> <span class=
"comment">// MuldeR
's Utilities for Qt
</span></div><div class=
"line"><a name=
"l00003"></a><span class=
"lineno"> 3</span> <span class=
"comment">// Copyright (C)
2004-
2022 LoRd_MuldeR
<MuldeR2@GMX.de
></span></div><div class=
"line"><a name=
"l00004"></a><span class=
"lineno"> 4</span> <span class=
"comment">//
</span></div><div class=
"line"><a name=
"l00005"></a><span class=
"lineno"> 5</span> <span class=
"comment">// This library is free software; you can redistribute it and/or
</span></div><div class=
"line"><a name=
"l00006"></a><span class=
"lineno"> 6</span> <span class=
"comment">// modify it under the terms of the GNU Lesser General Public
</span></div><div class=
"line"><a name=
"l00007"></a><span class=
"lineno"> 7</span> <span class=
"comment">// License as published by the Free Software Foundation; either
</span></div><div class=
"line"><a name=
"l00008"></a><span class=
"lineno"> 8</span> <span class=
"comment">// version
2.1 of the License, or (at your option) any later version.
</span></div><div class=
"line"><a name=
"l00009"></a><span class=
"lineno"> 9</span> <span class=
"comment">//
</span></div><div class=
"line"><a name=
"l00010"></a><span class=
"lineno"> 10</span> <span class=
"comment">// This library is distributed in the hope that it will be useful,
</span></div><div class=
"line"><a name=
"l00011"></a><span class=
"lineno"> 11</span> <span class=
"comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of
</span></div><div class=
"line"><a name=
"l00012"></a><span class=
"lineno"> 12</span> <span class=
"comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
</span></div><div class=
"line"><a name=
"l00013"></a><span class=
"lineno"> 13</span> <span class=
"comment">// Lesser General Public License for more details.
</span></div><div class=
"line"><a name=
"l00014"></a><span class=
"lineno"> 14</span> <span class=
"comment">//
</span></div><div class=
"line"><a name=
"l00015"></a><span class=
"lineno"> 15</span> <span class=
"comment">// You should have received a copy of the GNU Lesser General Public
</span></div><div class=
"line"><a name=
"l00016"></a><span class=
"lineno"> 16</span> <span class=
"comment">// License along with this library; if not, write to the Free Software
</span></div><div class=
"line"><a name=
"l00017"></a><span class=
"lineno"> 17</span> <span class=
"comment">// Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA
02110-
1301 USA
</span></div><div class=
"line"><a name=
"l00018"></a><span class=
"lineno"> 18</span> <span class=
"comment">//
</span></div><div class=
"line"><a name=
"l00019"></a><span class=
"lineno"> 19</span> <span class=
"comment">// http://www.gnu.org/licenses/lgpl-
2.1.txt
</span></div><div class=
"line"><a name=
"l00021"></a><span class=
"lineno"> 21</span> <span class=
"comment"></span></div><div class=
"line"><a name=
"l00029"></a><span class=
"lineno"> 29</span> <span class=
"preprocessor">#pragma once
</span></div><div class=
"line"><a name=
"l00030"></a><span class=
"lineno"> 30</span> </div><div class=
"line"><a name=
"l00031"></a><span class=
"lineno"> 31</span> <span class=
"comment">//MUtils
</span></div><div class=
"line"><a name=
"l00032"></a><span class=
"lineno"> 32</span> <span class=
"preprocessor">#include
<<a class=
"code" href=
"../../d5/d3b/_global_8h.html">MUtils/Global.h
</a>></span></div><div class=
"line"><a name=
"l00033"></a><span class=
"lineno"> 33</span> </div><div class=
"line"><a name=
"l00034"></a><span class=
"lineno"> 34</span> <span class=
"comment">//Qt
</span></div><div class=
"line"><a name=
"l00035"></a><span class=
"lineno"> 35</span> <span class=
"preprocessor">#include
<QByteArray
></span></div><div class=
"line"><a name=
"l00036"></a><span class=
"lineno"> 36</span> <span class=
"preprocessor">#include
<QFile
></span></div><div class=
"line"><a name=
"l00037"></a><span class=
"lineno"> 37</span> </div><div class=
"line"><a name=
"l00038"></a><span class=
"lineno"> 38</span> <span class=
"keyword">namespace
</span><a class=
"code" href=
"../../d3/da6/namespace_m_utils.html">MUtils
</a></div><div class=
"line"><a name=
"l00039"></a><span class=
"lineno"> 39</span> {
</div><div class=
"line"><a name=
"l00040"></a><span class=
"lineno"> 40</span>  <span class=
"keyword">namespace
</span>Hash
</div><div class=
"line"><a name=
"l00041"></a><span class=
"lineno"> 41</span>  {
</div><div class=
"line"><a name=
"l00042"></a><span class=
"lineno"><a class=
"line" href=
"../../d2/dad/_hash_8h.html#aa9e34ac422f4e52061cb8908f922fe17"> 42</a></span>  <span class=
"keyword">static
</span> <span class=
"keyword">const
</span> quint16
<a class=
"code" href=
"../../d2/dad/_hash_8h.html#aa9e34ac422f4e52061cb8908f922fe17">HASH_BLAKE2_512
</a> =
0x0000U;
</div><div class=
"line"><a name=
"l00043"></a><span class=
"lineno"><a class=
"line" href=
"../../d2/dad/_hash_8h.html#a3cfb72f121ca5c03dd8452c322549d11"> 43</a></span>  <span class=
"keyword">static
</span> <span class=
"keyword">const
</span> quint16
<a class=
"code" href=
"../../d2/dad/_hash_8h.html#a3cfb72f121ca5c03dd8452c322549d11">HASH_KECCAK_224
</a> =
0x0100U;
</div><div class=
"line"><a name=
"l00044"></a><span class=
"lineno"><a class=
"line" href=
"../../d2/dad/_hash_8h.html#ae38cda07e425eb7c745492215a48ae08"> 44</a></span>  <span class=
"keyword">static
</span> <span class=
"keyword">const
</span> quint16
<a class=
"code" href=
"../../d2/dad/_hash_8h.html#ae38cda07e425eb7c745492215a48ae08">HASH_KECCAK_256
</a> =
0x0101U;
</div><div class=
"line"><a name=
"l00045"></a><span class=
"lineno"><a class=
"line" href=
"../../d2/dad/_hash_8h.html#af80dfb1569816fab7ab5ed32e6386458"> 45</a></span>  <span class=
"keyword">static
</span> <span class=
"keyword">const
</span> quint16
<a class=
"code" href=
"../../d2/dad/_hash_8h.html#af80dfb1569816fab7ab5ed32e6386458">HASH_KECCAK_384
</a> =
0x0102U;
</div><div class=
"line"><a name=
"l00046"></a><span class=
"lineno"><a class=
"line" href=
"../../d2/dad/_hash_8h.html#a89ad922f2cada9a15893852d43134119"> 46</a></span>  <span class=
"keyword">static
</span> <span class=
"keyword">const
</span> quint16
<a class=
"code" href=
"../../d2/dad/_hash_8h.html#a89ad922f2cada9a15893852d43134119">HASH_KECCAK_512
</a> =
0x0103U;
</div><div class=
"line"><a name=
"l00047"></a><span class=
"lineno"> 47</span> </div><div class=
"line"><a name=
"l00057"></a><span class=
"lineno"><a class=
"line" href=
"../../da/db0/class_m_utils_1_1_hash_1_1_hash.html"> 57</a></span>  <span class=
"keyword">class
</span>MUTILS_API
<a class=
"code" href=
"../../da/db0/class_m_utils_1_1_hash_1_1_hash.html">Hash
</a></div><div class=
"line"><a name=
"l00058"></a><span class=
"lineno"> 58</span>  {
</div><div class=
"line"><a name=
"l00059"></a><span class=
"lineno"> 59</span>  <span class=
"keyword">public
</span>:
</div><div class=
"line"><a name=
"l00060"></a><span class=
"lineno"> 60</span>  <span class=
"keyword">virtual
</span> ~
<a class=
"code" href=
"../../da/db0/class_m_utils_1_1_hash_1_1_hash.html">Hash
</a>(
<span class=
"keywordtype">void
</span>) {};
</div><div class=
"line"><a name=
"l00061"></a><span class=
"lineno"> 61</span> </div><div class=
"line"><a name=
"l00073"></a><span class=
"lineno"><a class=
"line" href=
"../../da/db0/class_m_utils_1_1_hash_1_1_hash.html#a5c36bd2ea671928f9f5bd897dcfbef15"> 73</a></span>  <span class=
"keywordtype">bool
</span> <a class=
"code" href=
"../../da/db0/class_m_utils_1_1_hash_1_1_hash.html#a5c36bd2ea671928f9f5bd897dcfbef15">update
</a>(
<span class=
"keyword">const
</span> quint8 *
<span class=
"keyword">const
</span> data,
<span class=
"keyword">const
</span> quint32 len) {
<span class=
"keywordflow">return
</span> process(data, len); }
</div><div class=
"line"><a name=
"l00074"></a><span class=
"lineno"> 74</span> </div><div class=
"line"><a name=
"l00084"></a><span class=
"lineno"><a class=
"line" href=
"../../da/db0/class_m_utils_1_1_hash_1_1_hash.html#a16bef08766de745913b3fd7c338bf5aa"> 84</a></span>  <span class=
"keywordtype">bool
</span> <a class=
"code" href=
"../../da/db0/class_m_utils_1_1_hash_1_1_hash.html#a16bef08766de745913b3fd7c338bf5aa">update
</a>(
<span class=
"keyword">const
</span> QByteArray
&data) {
<span class=
"keywordflow">return
</span> process(((
<span class=
"keyword">const
</span> quint8*)data.constData()), ((quint32)data.length())); }
</div><div class=
"line"><a name=
"l00085"></a><span class=
"lineno"> 85</span> </div><div class=
"line"><a name=
"l00095"></a><span class=
"lineno"> 95</span>  <span class=
"keywordtype">bool
</span> update(QFile
&file);
</div><div class=
"line"><a name=
"l00096"></a><span class=
"lineno"> 96</span> </div><div class=
"line"><a name=
"l00106"></a><span class=
"lineno"><a class=
"line" href=
"../../da/db0/class_m_utils_1_1_hash_1_1_hash.html#a1d70f2b647935868a178920196ec0ac1"> 106</a></span>  QByteArray
<a class=
"code" href=
"../../da/db0/class_m_utils_1_1_hash_1_1_hash.html#a1d70f2b647935868a178920196ec0ac1">digest
</a>(
<span class=
"keyword">const
</span> <span class=
"keywordtype">bool
</span> bAsHex =
<span class=
"keyword">true
</span>) {
<span class=
"keywordflow">return
</span> bAsHex ? finalize().toHex() : finalize(); }
</div><div class=
"line"><a name=
"l00107"></a><span class=
"lineno"> 107</span> </div><div class=
"line"><a name=
"l00108"></a><span class=
"lineno"> 108</span>  <span class=
"keyword">protected
</span>:
</div><div class=
"line"><a name=
"l00109"></a><span class=
"lineno"> 109</span>  <a class=
"code" href=
"../../da/db0/class_m_utils_1_1_hash_1_1_hash.html">Hash
</a>(
<span class=
"keyword">const
</span> <span class=
"keywordtype">char
</span>*
<span class=
"comment">/*key*/
</span> = NULL) {
<span class=
"comment">/*nothing to do*/
</span>};
</div><div class=
"line"><a name=
"l00110"></a><span class=
"lineno"> 110</span>  <span class=
"keyword">virtual
</span> <span class=
"keywordtype">bool
</span> process(
<span class=
"keyword">const
</span> quint8 *
<span class=
"keyword">const
</span> data,
<span class=
"keyword">const
</span> quint32 len) =
0;
</div><div class=
"line"><a name=
"l00111"></a><span class=
"lineno"> 111</span>  <span class=
"keyword">virtual
</span> QByteArray finalize(
<span class=
"keywordtype">void
</span>) =
0;
</div><div class=
"line"><a name=
"l00112"></a><span class=
"lineno"> 112</span> </div><div class=
"line"><a name=
"l00113"></a><span class=
"lineno"> 113</span>  <span class=
"keyword">private
</span>:
</div><div class=
"line"><a name=
"l00114"></a><span class=
"lineno"> 114</span>  <a class=
"code" href=
"../../d5/d3b/_global_8h.html#a8e7b4857b78f9749233e5abc96534ca8">MUTILS_NO_COPY
</a>(
<a class=
"code" href=
"../../da/db0/class_m_utils_1_1_hash_1_1_hash.html">Hash
</a>);
</div><div class=
"line"><a name=
"l00115"></a><span class=
"lineno"> 115</span>  };
</div><div class=
"line"><a name=
"l00116"></a><span class=
"lineno"> 116</span> </div><div class=
"line"><a name=
"l00128"></a><span class=
"lineno"> 128</span>  MUTILS_API
<a class=
"code" href=
"../../da/db0/class_m_utils_1_1_hash_1_1_hash.html">Hash
</a> *
<a class=
"code" href=
"../../d2/dad/_hash_8h.html#a330b73d6927d6cd95892712f9396f40e">create
</a>(
<span class=
"keyword">const
</span> quint16
&hashId,
<span class=
"keyword">const
</span> <span class=
"keywordtype">char
</span> *
<span class=
"keyword">const
</span> key = NULL);
</div><div class=
"line"><a name=
"l00129"></a><span class=
"lineno"> 129</span>  }
</div><div class=
"line"><a name=
"l00130"></a><span class=
"lineno"> 130</span> }
</div><div class=
"ttc" id=
"class_m_utils_1_1_hash_1_1_hash_html_a16bef08766de745913b3fd7c338bf5aa"><div class=
"ttname"><a href=
"../../da/db0/class_m_utils_1_1_hash_1_1_hash.html#a16bef08766de745913b3fd7c338bf5aa">MUtils::Hash::Hash::update
</a></div><div class=
"ttdeci">bool update(const QByteArray
&data)
</div><div class=
"ttdoc">Process the next chunk of input data.
</div><div class=
"ttdef"><b>Definition:
</b> Hash.h:
84</div></div>
71 <div class=
"ttc" id=
"_global_8h_html"><div class=
"ttname"><a href=
"../../d5/d3b/_global_8h.html">Global.h
</a></div><div class=
"ttdoc">This file contains miscellaneous functions that are generally useful for Qt-based applications...
</div></div>
72 <div class=
"ttc" id=
"class_m_utils_1_1_hash_1_1_hash_html_a5c36bd2ea671928f9f5bd897dcfbef15"><div class=
"ttname"><a href=
"../../da/db0/class_m_utils_1_1_hash_1_1_hash.html#a5c36bd2ea671928f9f5bd897dcfbef15">MUtils::Hash::Hash::update
</a></div><div class=
"ttdeci">bool update(const quint8 *const data, const quint32 len)
</div><div class=
"ttdoc">Process the next chunk of input data.
</div><div class=
"ttdef"><b>Definition:
</b> Hash.h:
73</div></div>
73 <div class=
"ttc" id=
"_hash_8h_html_aa9e34ac422f4e52061cb8908f922fe17"><div class=
"ttname"><a href=
"../../d2/dad/_hash_8h.html#aa9e34ac422f4e52061cb8908f922fe17">MUtils::Hash::HASH_BLAKE2_512
</a></div><div class=
"ttdeci">static const quint16 HASH_BLAKE2_512
</div><div class=
"ttdoc">Hash algorithm identifier.
</div><div class=
"ttdef"><b>Definition:
</b> Hash.h:
42</div></div>
74 <div class=
"ttc" id=
"_hash_8h_html_af80dfb1569816fab7ab5ed32e6386458"><div class=
"ttname"><a href=
"../../d2/dad/_hash_8h.html#af80dfb1569816fab7ab5ed32e6386458">MUtils::Hash::HASH_KECCAK_384
</a></div><div class=
"ttdeci">static const quint16 HASH_KECCAK_384
</div><div class=
"ttdoc">Hash algorithm identifier.
</div><div class=
"ttdef"><b>Definition:
</b> Hash.h:
45</div></div>
75 <div class=
"ttc" id=
"namespace_m_utils_html"><div class=
"ttname"><a href=
"../../d3/da6/namespace_m_utils.html">MUtils
</a></div><div class=
"ttdoc">Global MUtils namespace.
</div><div class=
"ttdef"><b>Definition:
</b> CPUFeatures.h:
37</div></div>
76 <div class=
"ttc" id=
"_global_8h_html_a8e7b4857b78f9749233e5abc96534ca8"><div class=
"ttname"><a href=
"../../d5/d3b/_global_8h.html#a8e7b4857b78f9749233e5abc96534ca8">MUTILS_NO_COPY
</a></div><div class=
"ttdeci">#define MUTILS_NO_COPY(CLASS)
</div><div class=
"ttdoc">Disables copy constructor and assignment operator in the specified class. This macro should be used i...
</div><div class=
"ttdef"><b>Definition:
</b> Global.h:
429</div></div>
77 <div class=
"ttc" id=
"_hash_8h_html_a330b73d6927d6cd95892712f9396f40e"><div class=
"ttname"><a href=
"../../d2/dad/_hash_8h.html#a330b73d6927d6cd95892712f9396f40e">MUtils::Hash::create
</a></div><div class=
"ttdeci">MUTILS_API Hash * create(const quint16
&hashId, const char *const key=NULL)
</div><div class=
"ttdoc">Create instance of a hash function.
</div></div>
78 <div class=
"ttc" id=
"class_m_utils_1_1_hash_1_1_hash_html"><div class=
"ttname"><a href=
"../../da/db0/class_m_utils_1_1_hash_1_1_hash.html">MUtils::Hash::Hash
</a></div><div class=
"ttdoc">This abstract class specifies the generic interface for all support hash algorithms.
</div><div class=
"ttdef"><b>Definition:
</b> Hash.h:
57</div></div>
79 <div class=
"ttc" id=
"_hash_8h_html_ae38cda07e425eb7c745492215a48ae08"><div class=
"ttname"><a href=
"../../d2/dad/_hash_8h.html#ae38cda07e425eb7c745492215a48ae08">MUtils::Hash::HASH_KECCAK_256
</a></div><div class=
"ttdeci">static const quint16 HASH_KECCAK_256
</div><div class=
"ttdoc">Hash algorithm identifier.
</div><div class=
"ttdef"><b>Definition:
</b> Hash.h:
44</div></div>
80 <div class=
"ttc" id=
"_hash_8h_html_a3cfb72f121ca5c03dd8452c322549d11"><div class=
"ttname"><a href=
"../../d2/dad/_hash_8h.html#a3cfb72f121ca5c03dd8452c322549d11">MUtils::Hash::HASH_KECCAK_224
</a></div><div class=
"ttdeci">static const quint16 HASH_KECCAK_224
</div><div class=
"ttdoc">Hash algorithm identifier.
</div><div class=
"ttdef"><b>Definition:
</b> Hash.h:
43</div></div>
81 <div class=
"ttc" id=
"class_m_utils_1_1_hash_1_1_hash_html_a1d70f2b647935868a178920196ec0ac1"><div class=
"ttname"><a href=
"../../da/db0/class_m_utils_1_1_hash_1_1_hash.html#a1d70f2b647935868a178920196ec0ac1">MUtils::Hash::Hash::digest
</a></div><div class=
"ttdeci">QByteArray digest(const bool bAsHex=true)
</div><div class=
"ttdoc">Retrieve the hash value.
</div><div class=
"ttdef"><b>Definition:
</b> Hash.h:
106</div></div>
82 <div class=
"ttc" id=
"_hash_8h_html_a89ad922f2cada9a15893852d43134119"><div class=
"ttname"><a href=
"../../d2/dad/_hash_8h.html#a89ad922f2cada9a15893852d43134119">MUtils::Hash::HASH_KECCAK_512
</a></div><div class=
"ttdeci">static const quint16 HASH_KECCAK_512
</div><div class=
"ttdoc">Hash algorithm identifier.
</div><div class=
"ttdef"><b>Definition:
</b> Hash.h:
46</div></div>
83 </div><!-- fragment --></div><!-- contents -->
84 <!-- start footer part -->
85 <hr class=
"footer"/><address class=
"footer"><small>
86 Generated by
 <a href=
"http://www.doxygen.org/index.html">
87 <img class=
"footer" src=
"../../doxygen.png" alt=
"doxygen"/>