Sophie

Sophie

distrib > Mageia > 7 > armv7hl > media > core-release > by-pkgid > 0a67b807a02637f2cae68649d519a89d > files > 2245

libcryptopp-devel-7.0.0-1.mga7.armv7hl.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.14"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Crypto++: filters.cpp 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>
<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 style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Crypto++
   &#160;<span id="projectnumber">7.0</span>
   </div>
   <div id="projectbrief">Free&nbsp;C&#43;&#43;&nbsp;class&nbsp;library&nbsp;of&nbsp;cryptographic&nbsp;schemes</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.14 -->
<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:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">filters.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">// filters.cpp - originally written and placed in the public domain by Wei Dai</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;</div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="pch_8h.html">pch.h</a>&quot;</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="config_8h.html">config.h</a>&quot;</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#if CRYPTOPP_MSC_VERSION</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor"># pragma warning(disable: 4100 4189 4355)</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor"># pragma GCC diagnostic ignored &quot;-Wunused-value&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#ifndef CRYPTOPP_IMPORTS</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="filters_8h.html">filters.h</a>&quot;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &quot;mqueue.h&quot;</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &quot;fltrimpl.h&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="argnames_8h.html">argnames.h</a>&quot;</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="smartptr_8h.html">smartptr.h</a>&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="stdcpp_8h.html">stdcpp.h</a>&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="misc_8h.html">misc.h</a>&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;NAMESPACE_BEGIN(<a class="code" href="namespace_crypto_p_p.html">CryptoPP</a>)</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="class_filter.html#a3c1c355eb02ae048020785d335bad6b3">   26</a></span>&#160;<a class="code" href="class_filter.html">Filter</a>::<a class="code" href="class_filter.html">Filter</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment)</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;    : m_attachment(attachment), m_inputPosition(0), m_continueAt(0)</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;{</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;}</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> * Filter::NewDefaultAttachment()<span class="keyword"> const</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="class_message_queue.html">MessageQueue</a>;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;}</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">   36</a></span>&#160;<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> * <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">Filter::AttachedTransformation</a>()</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;{</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    <span class="keywordflow">if</span> (m_attachment.get() == NULLPTR)</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;        m_attachment.reset(NewDefaultAttachment());</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    <span class="keywordflow">return</span> m_attachment.get();</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;}</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="class_filter.html#a049148324c63bda47ac676f64e113b26">   43</a></span>&#160;<span class="keyword">const</span> <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *<a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">Filter::AttachedTransformation</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    <span class="keywordflow">if</span> (m_attachment.get() == NULLPTR)</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;        const_cast&lt;Filter *&gt;(<span class="keyword">this</span>)-&gt;m_attachment.reset(NewDefaultAttachment());</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    <span class="keywordflow">return</span> m_attachment.get();</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;}</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="class_filter.html#a93817876b45172108fe0342de6442f75">   50</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_filter.html#a93817876b45172108fe0342de6442f75">Filter::Detach</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *newOut)</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;{</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    m_attachment.reset(newOut);</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;}</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="keywordtype">void</span> Filter::Insert(<a class="code" href="class_filter.html">Filter</a> *filter)</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;{</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    filter-&gt;m_attachment.reset(m_attachment.release());</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    m_attachment.reset(filter);</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;}</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="class_filter.html#a9cde2dec371b3074cb4ed92d57ef1f24">   61</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="class_filter.html#a9cde2dec371b3074cb4ed92d57ef1f24">Filter::CopyRangeTo2</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;target, lword &amp;begin, lword end, <span class="keyword">const</span> std::string &amp;channel, <span class="keywordtype">bool</span> blocking)<span class="keyword"> const</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#a7f90ef36f633c97c1ae519b800527d8e">CopyRangeTo2</a>(target, begin, end, channel, blocking);</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;}</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="class_filter.html#ab24c6c52bb6185c25ee6efcced36dbd0">   66</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="class_filter.html#ab24c6c52bb6185c25ee6efcced36dbd0">Filter::TransferTo2</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;target, lword &amp;transferBytes, <span class="keyword">const</span> std::string &amp;channel, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;{</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#a27ac15af3ef43c5ad1e9db5812025fcd">TransferTo2</a>(target, transferBytes, channel, blocking);</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;}</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="class_filter.html#a0c011bdc71755b373292e7a722e9e332">   71</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_filter.html#a0c011bdc71755b373292e7a722e9e332">Filter::Initialize</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters, <span class="keywordtype">int</span> propagation)</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;{</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    m_inputPosition = m_continueAt = 0;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    <a class="code" href="class_buffered_transformation.html#a7bb05ac3b6302e2ab994586d526fa804">IsolatedInitialize</a>(parameters);</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    PropagateInitialize(parameters, propagation);</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;}</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="class_filter.html#ad845deb5113d2bd04d109c05abfd3098">   78</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="class_filter.html#ad845deb5113d2bd04d109c05abfd3098">Filter::Flush</a>(<span class="keywordtype">bool</span> hardFlush, <span class="keywordtype">int</span> propagation, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;{</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    <span class="keywordflow">switch</span> (m_continueAt)</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    {</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    <span class="keywordflow">case</span> 0:</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="class_buffered_transformation.html#a68044dc8d57bc02edee1ce02b459a63d">IsolatedFlush</a>(hardFlush, blocking))</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;        <span class="comment">// fall through</span></div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;        <span class="keywordflow">if</span> (OutputFlush(1, hardFlush, propagation, blocking))</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;        <span class="comment">// fall through</span></div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    <span class="keywordflow">default</span>: ;;</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    }</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;}</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="class_filter.html#aa42c62587dda61266ac8195d9c9edb47">   95</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="class_filter.html#aa42c62587dda61266ac8195d9c9edb47">Filter::MessageSeriesEnd</a>(<span class="keywordtype">int</span> propagation, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;{</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    <span class="keywordflow">switch</span> (m_continueAt)</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    {</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    <span class="keywordflow">case</span> 0:</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="class_buffered_transformation.html#aaf09f0cd6dbd022539a9ac5c316d4984">IsolatedMessageSeriesEnd</a>(blocking))</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;        <span class="comment">// fall through</span></div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;        <span class="keywordflow">if</span> (ShouldPropagateMessageSeriesEnd() &amp;&amp; OutputMessageSeriesEnd(1, propagation, blocking))</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;        <span class="comment">// fall through</span></div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    <span class="keywordflow">default</span>: ;;</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    }</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;}</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;<span class="keywordtype">void</span> Filter::PropagateInitialize(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters, <span class="keywordtype">int</span> propagation)</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;{</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    <span class="keywordflow">if</span> (propagation)</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;        <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#a0dd5456c06e0e47d901e8055b50df929">Initialize</a>(parameters, propagation-1);</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;}</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;<span class="keywordtype">size_t</span> Filter::OutputModifiable(<span class="keywordtype">int</span> outputSite, byte *inString, <span class="keywordtype">size_t</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking, <span class="keyword">const</span> std::string &amp;channel)</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;{</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <span class="keywordflow">if</span> (messageEnd)</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;        messageEnd--;</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    <span class="keywordtype">size_t</span> result = <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#add2a8b1b88a881edf8bebe089438fc66">ChannelPutModifiable2</a>(channel, inString, length, messageEnd, blocking);</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    m_continueAt = result ? outputSite : 0;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;}</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;<span class="keywordtype">size_t</span> Filter::Output(<span class="keywordtype">int</span> outputSite, <span class="keyword">const</span> byte *inString, <span class="keywordtype">size_t</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking, <span class="keyword">const</span> std::string &amp;channel)</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;{</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    <span class="keywordflow">if</span> (messageEnd)</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;        messageEnd--;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keywordtype">size_t</span> result = <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae6b026f47d8a0ea2e35a6cb8d9ec2c97">ChannelPut2</a>(channel, inString, length, messageEnd, blocking);</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    m_continueAt = result ? outputSite : 0;</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;}</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<span class="keywordtype">bool</span> Filter::OutputFlush(<span class="keywordtype">int</span> outputSite, <span class="keywordtype">bool</span> hardFlush, <span class="keywordtype">int</span> propagation, <span class="keywordtype">bool</span> blocking, <span class="keyword">const</span> std::string &amp;channel)</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;{</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    <span class="keywordflow">if</span> (propagation &amp;&amp; <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#a6b504b2694ecb5d709a9858c5b93a0f7">ChannelFlush</a>(channel, hardFlush, propagation-1, blocking))</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    {</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        m_continueAt = outputSite;</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    }</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    m_continueAt = 0;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;}</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;<span class="keywordtype">bool</span> Filter::OutputMessageSeriesEnd(<span class="keywordtype">int</span> outputSite, <span class="keywordtype">int</span> propagation, <span class="keywordtype">bool</span> blocking, <span class="keyword">const</span> std::string &amp;channel)</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;{</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    <span class="keywordflow">if</span> (propagation &amp;&amp; <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae0fc63d42d94958f71fc573b17469921">ChannelMessageSeriesEnd</a>(channel, propagation-1, blocking))</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    {</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;        m_continueAt = outputSite;</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    }</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    m_continueAt = 0;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;}</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;<span class="comment">// *************************************************************</span></div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="class_meter_filter.html#a59c4b05b453ad56ed42b6951ab986db0">  160</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_meter_filter.html#a59c4b05b453ad56ed42b6951ab986db0">MeterFilter::ResetMeter</a>()</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;{</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    m_currentMessageBytes = m_totalBytes = m_currentSeriesMessages = m_totalMessages = m_totalMessageSeries = 0;</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    m_rangesToSkip.clear();</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;}</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="class_meter_filter.html#a58898a4bba38196c8432b8b5d324b671">  166</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_meter_filter.html#a58898a4bba38196c8432b8b5d324b671">MeterFilter::AddRangeToSkip</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> message, lword position, lword size, <span class="keywordtype">bool</span> sortNow)</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;{</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    MessageRange r = {message, position, size};</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    m_rangesToSkip.push_back(r);</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    <span class="keywordflow">if</span> (sortNow)</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;        std::sort(m_rangesToSkip.begin(), m_rangesToSkip.end());</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;}</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;<span class="keywordtype">size_t</span> MeterFilter::PutMaybeModifiable(byte *begin, <span class="keywordtype">size_t</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking, <span class="keywordtype">bool</span> modifiable)</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;{</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    <span class="keywordflow">if</span> (!m_transparent)</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;        <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    <span class="keywordtype">size_t</span> t;</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    FILTER_BEGIN;</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    m_begin = begin;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    m_length = length;</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    <span class="keywordflow">while</span> (m_length &gt; 0 || messageEnd)</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    {</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;        <span class="keywordflow">if</span> (m_length &gt; 0  &amp;&amp; !m_rangesToSkip.empty() &amp;&amp; m_rangesToSkip.front().message == m_totalMessages &amp;&amp; m_currentMessageBytes + m_length &gt; m_rangesToSkip.front().position)</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;        {</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;            FILTER_OUTPUT_MAYBE_MODIFIABLE(1, m_begin, t = (<span class="keywordtype">size_t</span>)<a class="code" href="misc_8h.html#a30712a90999ad9d9152975f2e92d46b8">SaturatingSubtract</a>(m_rangesToSkip.front().position, m_currentMessageBytes), <span class="keyword">false</span>, modifiable);</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;            <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(t &lt; m_length);</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;            m_begin += t;</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;            m_length -= t;</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;            m_currentMessageBytes += t;</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;            m_totalBytes += t;</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;            <span class="keywordflow">if</span> (m_currentMessageBytes + m_length &lt; m_rangesToSkip.front().position + m_rangesToSkip.front().size)</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;                t = m_length;</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;            {</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;                t = (size_t)<a class="code" href="misc_8h.html#a30712a90999ad9d9152975f2e92d46b8">SaturatingSubtract</a>(m_rangesToSkip.front().position + m_rangesToSkip.front().size, m_currentMessageBytes);</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;                <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(t &lt;= m_length);</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;                m_rangesToSkip.pop_front();</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;            }</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;            m_begin += t;</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;            m_length -= t;</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;            m_currentMessageBytes += t;</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;            m_totalBytes += t;</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;        }</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;        {</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;            FILTER_OUTPUT_MAYBE_MODIFIABLE(2, m_begin, m_length, messageEnd, modifiable);</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;            m_currentMessageBytes += m_length;</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;            m_totalBytes += m_length;</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;            m_length = 0;</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;            <span class="keywordflow">if</span> (messageEnd)</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;            {</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;                m_currentMessageBytes = 0;</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;                m_currentSeriesMessages++;</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;                m_totalMessages++;</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;                messageEnd = <span class="keyword">false</span>;</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;            }</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;        }</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    }</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;    FILTER_END_NO_MESSAGE_END;</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;}</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="class_meter_filter.html#a7d59d4e7f674b5ba6a54e8e241cf9148">  232</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="class_meter_filter.html#a7d59d4e7f674b5ba6a54e8e241cf9148">MeterFilter::Put2</a>(<span class="keyword">const</span> byte *begin, <span class="keywordtype">size_t</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;{</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    <span class="keywordflow">return</span> PutMaybeModifiable(const_cast&lt;byte *&gt;(begin), length, messageEnd, blocking, <span class="keyword">false</span>);</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;}</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;</div><div class="line"><a name="l00237"></a><span class="lineno"><a class="line" href="class_meter_filter.html#a03c8af7442aa844e83e4c45397373f14">  237</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="class_meter_filter.html#a03c8af7442aa844e83e4c45397373f14">MeterFilter::PutModifiable2</a>(byte *begin, <span class="keywordtype">size_t</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;{</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    <span class="keywordflow">return</span> PutMaybeModifiable(begin, length, messageEnd, blocking, <span class="keyword">true</span>);</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;}</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="class_meter_filter.html#aa3b923710e4ed83fb4980cb53504a521">  242</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="class_meter_filter.html#aa3b923710e4ed83fb4980cb53504a521">MeterFilter::IsolatedMessageSeriesEnd</a>(<span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;{</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;    CRYPTOPP_UNUSED(blocking);</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    m_currentMessageBytes = 0;</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    m_currentSeriesMessages = 0;</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    m_totalMessageSeries++;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;}</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;<span class="comment">// *************************************************************</span></div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;<span class="keywordtype">void</span> FilterWithBufferedInput::BlockQueue::ResetQueue(<span class="keywordtype">size_t</span> blockSize, <span class="keywordtype">size_t</span> maxBlocks)</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;{</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;    m_buffer.New(blockSize * maxBlocks);</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    m_blockSize = blockSize;</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    m_maxBlocks = maxBlocks;</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    m_size = 0;</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    m_begin = m_buffer;</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;}</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;byte *FilterWithBufferedInput::BlockQueue::GetBlock()</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;{</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    <span class="keywordflow">if</span> (m_size &gt;= m_blockSize)</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    {</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;        byte *ptr = m_begin;</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;        <span class="keywordflow">if</span> ((m_begin+=m_blockSize) == m_buffer.end())</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;            m_begin = m_buffer;</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;        m_size -= m_blockSize;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;        <span class="keywordflow">return</span> ptr;</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    }</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;        <span class="keywordflow">return</span> NULLPTR;</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;}</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;byte *FilterWithBufferedInput::BlockQueue::GetContigousBlocks(<span class="keywordtype">size_t</span> &amp;numberOfBytes)</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;{</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    numberOfBytes = <a class="code" href="misc_8h.html#abe412b0409249cb54899e97bc7d86424">STDMIN</a>(numberOfBytes, <a class="code" href="misc_8h.html#abe412b0409249cb54899e97bc7d86424">STDMIN</a>(<span class="keywordtype">size_t</span>(m_buffer.end()-m_begin), m_size));</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    byte *ptr = m_begin;</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    m_begin += numberOfBytes;</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    m_size -= numberOfBytes;</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    <span class="keywordflow">if</span> (m_size == 0 || m_begin == m_buffer.end())</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;        m_begin = m_buffer;</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    <span class="keywordflow">return</span> ptr;</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;}</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;<span class="keywordtype">size_t</span> FilterWithBufferedInput::BlockQueue::GetAll(byte *outString)</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;{</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    <span class="comment">// Avoid passing NULL pointer to memcpy</span></div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;    <span class="keywordflow">if</span> (!outString) <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;    <span class="keywordtype">size_t</span> size = m_size;</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;    <span class="keywordtype">size_t</span> numberOfBytes = m_maxBlocks*m_blockSize;</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;    <span class="keyword">const</span> byte *ptr = GetContigousBlocks(numberOfBytes);</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;    memcpy(outString, ptr, numberOfBytes);</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    memcpy(outString+numberOfBytes, m_begin, m_size);</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    m_size = 0;</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    <span class="keywordflow">return</span> size;</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;}</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;<span class="keywordtype">void</span> FilterWithBufferedInput::BlockQueue::Put(<span class="keyword">const</span> byte *inString, <span class="keywordtype">size_t</span> length)</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;{</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    <span class="comment">// Avoid passing NULL pointer to memcpy</span></div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    <span class="keywordflow">if</span> (!inString || !length) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;    <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(m_size + length &lt;= m_buffer.size());</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    byte *end = (m_size &lt; size_t(m_buffer.end()-m_begin)) ? m_begin + m_size : m_begin + m_size - m_buffer.size();</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;    <span class="keywordtype">size_t</span> len = <a class="code" href="misc_8h.html#abe412b0409249cb54899e97bc7d86424">STDMIN</a>(length, <span class="keywordtype">size_t</span>(m_buffer.end()-end));</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    memcpy(end, inString, len);</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;    <span class="keywordflow">if</span> (len &lt; length)</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;        memcpy(m_buffer, inString+len, length-len);</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    m_size += length;</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;}</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="class_filter_with_buffered_input.html#a8c60c4e6452fdeb61f9d888bf50a706d">  315</a></span>&#160;<a class="code" href="class_filter_with_buffered_input.html#a8c60c4e6452fdeb61f9d888bf50a706d">FilterWithBufferedInput::FilterWithBufferedInput</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment)</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    : <a class="code" href="class_filter.html">Filter</a>(attachment), m_firstSize(<a class="code" href="misc_8h.html#a3c75bb398badb69c7577b21486f9963f">SIZE_MAX</a>), m_blockSize(0), m_lastSize(<a class="code" href="misc_8h.html#a3c75bb398badb69c7577b21486f9963f">SIZE_MAX</a>), m_firstInputDone(false)</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;{</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;}</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="class_filter_with_buffered_input.html#a9565e0646b6a53101f394992ca4e0d17">  320</a></span>&#160;<a class="code" href="class_filter_with_buffered_input.html#a8c60c4e6452fdeb61f9d888bf50a706d">FilterWithBufferedInput::FilterWithBufferedInput</a>(<span class="keywordtype">size_t</span> firstSize, <span class="keywordtype">size_t</span> blockSize, <span class="keywordtype">size_t</span> lastSize, <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment)</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;    : <a class="code" href="class_filter.html">Filter</a>(attachment), m_firstSize(firstSize), m_blockSize(blockSize), m_lastSize(lastSize), m_firstInputDone(false)</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;{</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;    <span class="keywordflow">if</span> (m_firstSize == <a class="code" href="misc_8h.html#a3c75bb398badb69c7577b21486f9963f">SIZE_MAX</a> || m_blockSize &lt; 1 || m_lastSize == <a class="code" href="misc_8h.html#a3c75bb398badb69c7577b21486f9963f">SIZE_MAX</a>)</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">&quot;FilterWithBufferedInput: invalid buffer size&quot;</span>);</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    m_queue.ResetQueue(1, m_firstSize);</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;}</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;</div><div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="class_filter_with_buffered_input.html#ae97be71708e0020167e5c08856fd3f3b">  329</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_filter_with_buffered_input.html#ae97be71708e0020167e5c08856fd3f3b">FilterWithBufferedInput::IsolatedInitialize</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters)</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;{</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;    InitializeDerivedAndReturnNewSizes(parameters, m_firstSize, m_blockSize, m_lastSize);</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;    <span class="keywordflow">if</span> (m_firstSize == <a class="code" href="misc_8h.html#a3c75bb398badb69c7577b21486f9963f">SIZE_MAX</a> || m_blockSize &lt; 1 || m_lastSize == <a class="code" href="misc_8h.html#a3c75bb398badb69c7577b21486f9963f">SIZE_MAX</a>)</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">&quot;FilterWithBufferedInput: invalid buffer size&quot;</span>);</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;    m_queue.ResetQueue(1, m_firstSize);</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;    m_firstInputDone = <span class="keyword">false</span>;</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;}</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;</div><div class="line"><a name="l00338"></a><span class="lineno"><a class="line" href="class_filter_with_buffered_input.html#a4261e0491864a31738cf53b3f9343806">  338</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="class_filter_with_buffered_input.html#a4261e0491864a31738cf53b3f9343806">FilterWithBufferedInput::IsolatedFlush</a>(<span class="keywordtype">bool</span> hardFlush, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;{</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    <span class="keywordflow">if</span> (!blocking)</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="struct_buffered_transformation_1_1_blocking_input_only.html">BlockingInputOnly</a>(<span class="stringliteral">&quot;FilterWithBufferedInput&quot;</span>);</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    <span class="keywordflow">if</span> (hardFlush)</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;        <a class="code" href="class_filter_with_buffered_input.html#afa0096257c94f94c3a5938a0e826c46f">ForceNextPut</a>();</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;    FlushDerived();</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;}</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;<span class="keywordtype">size_t</span> FilterWithBufferedInput::PutMaybeModifiable(byte *inString, <span class="keywordtype">size_t</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking, <span class="keywordtype">bool</span> modifiable)</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;{</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    <span class="keywordflow">if</span> (!blocking)</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;        <span class="keywordflow">throw</span> BlockingInputOnly(<span class="stringliteral">&quot;FilterWithBufferedInput&quot;</span>);</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    <span class="keywordflow">if</span> (length != 0)</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    {</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;        <span class="keywordtype">size_t</span> newLength = m_queue.CurrentSize() + length;</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;        <span class="keywordflow">if</span> (!m_firstInputDone &amp;&amp; newLength &gt;= m_firstSize)</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;        {</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;            <span class="keywordtype">size_t</span> len = m_firstSize - m_queue.CurrentSize();</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;            m_queue.Put(inString, len);</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;            FirstPut(m_queue.GetContigousBlocks(m_firstSize));</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;            <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(m_queue.CurrentSize() == 0);</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;            m_queue.ResetQueue(m_blockSize, (2*m_blockSize+m_lastSize-2)/m_blockSize);</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;            inString += len;</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;            newLength -= m_firstSize;</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;            m_firstInputDone = <span class="keyword">true</span>;</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;        }</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;        <span class="keywordflow">if</span> (m_firstInputDone)</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;        {</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;            <span class="keywordflow">if</span> (m_blockSize == 1)</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;            {</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;                <span class="keywordflow">while</span> (newLength &gt; m_lastSize &amp;&amp; m_queue.CurrentSize() &gt; 0)</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;                {</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;                    <span class="keywordtype">size_t</span> len = newLength - m_lastSize;</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;                    byte *ptr = m_queue.GetContigousBlocks(len);</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;                    NextPutModifiable(ptr, len);</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;                    newLength -= len;</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;                }</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;                <span class="keywordflow">if</span> (newLength &gt; m_lastSize)</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;                {</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;                    <span class="keywordtype">size_t</span> len = newLength - m_lastSize;</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;                    NextPutMaybeModifiable(inString, len, modifiable);</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;                    inString += len;</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;                    newLength -= len;</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;                }</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;            }</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;            {</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;                <span class="keywordflow">while</span> (newLength &gt;= m_blockSize + m_lastSize &amp;&amp; m_queue.CurrentSize() &gt;= m_blockSize)</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;                {</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;                    NextPutModifiable(m_queue.GetBlock(), m_blockSize);</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;                    newLength -= m_blockSize;</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;                }</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;                <span class="keywordflow">if</span> (newLength &gt;= m_blockSize + m_lastSize &amp;&amp; m_queue.CurrentSize() &gt; 0)</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;                {</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;                    <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(m_queue.CurrentSize() &lt; m_blockSize);</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;                    <span class="keywordtype">size_t</span> len = m_blockSize - m_queue.CurrentSize();</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;                    m_queue.Put(inString, len);</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;                    inString += len;</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;                    NextPutModifiable(m_queue.GetBlock(), m_blockSize);</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;                    newLength -= m_blockSize;</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;                }</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;                <span class="keywordflow">if</span> (newLength &gt;= m_blockSize + m_lastSize)</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;                {</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;                    <span class="keywordtype">size_t</span> len = <a class="code" href="misc_8h.html#aa2ac57210cb6796eced074e6d2e294fb">RoundDownToMultipleOf</a>(newLength - m_lastSize, m_blockSize);</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;                    NextPutMaybeModifiable(inString, len, modifiable);</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;                    inString += len;</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;                    newLength -= len;</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;                }</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;            }</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;        }</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;        m_queue.Put(inString, newLength - m_queue.CurrentSize());</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;    }</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;    <span class="keywordflow">if</span> (messageEnd)</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;    {</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;        <span class="keywordflow">if</span> (!m_firstInputDone &amp;&amp; m_firstSize==0)</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;            FirstPut(NULLPTR);</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;        <a class="code" href="class_sec_byte_block.html">SecByteBlock</a> temp(m_queue.CurrentSize());</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;        m_queue.GetAll(temp);</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;        LastPut(temp, temp.size());</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;        m_firstInputDone = <span class="keyword">false</span>;</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;        m_queue.ResetQueue(1, m_firstSize);</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;        <span class="comment">// Cast to void to suppress Coverity finding</span></div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;        (void)Output(1, NULLPTR, 0, messageEnd, blocking);</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;    }</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;}</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;</div><div class="line"><a name="l00441"></a><span class="lineno"><a class="line" href="class_filter_with_buffered_input.html#afa0096257c94f94c3a5938a0e826c46f">  441</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_filter_with_buffered_input.html#afa0096257c94f94c3a5938a0e826c46f">FilterWithBufferedInput::ForceNextPut</a>()</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;{</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;    <span class="keywordflow">if</span> (!m_firstInputDone)</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;    <span class="keywordflow">if</span> (m_blockSize &gt; 1)</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;    {</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;        <span class="keywordflow">while</span> (m_queue.CurrentSize() &gt;= m_blockSize)</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;            NextPutModifiable(m_queue.GetBlock(), m_blockSize);</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;    }</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;    {</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;        <span class="keywordtype">size_t</span> len;</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;        <span class="keywordflow">while</span> ((len = m_queue.CurrentSize()) &gt; 0)</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;            NextPutModifiable(m_queue.GetContigousBlocks(len), len);</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;    }</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;}</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;<span class="keywordtype">void</span> FilterWithBufferedInput::NextPutMultiple(<span class="keyword">const</span> byte *inString, <span class="keywordtype">size_t</span> length)</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;{</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;    <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(m_blockSize &gt; 1);   <span class="comment">// m_blockSize = 1 should always override this function</span></div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;    <span class="keywordflow">while</span> (length &gt; 0)</div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;    {</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;        <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(length &gt;= m_blockSize);</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;        NextPutSingle(inString);</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;        inString += m_blockSize;</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;        length -= m_blockSize;</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;    }</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;}</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;<span class="comment">// *************************************************************</span></div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;</div><div class="line"><a name="l00473"></a><span class="lineno"><a class="line" href="class_redirector.html#af5fe25d9b6e17ec878e8f2b188702736">  473</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_redirector.html#af5fe25d9b6e17ec878e8f2b188702736">Redirector::Initialize</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters, <span class="keywordtype">int</span> propagation)</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;{</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;    m_target = parameters.<a class="code" href="class_name_value_pairs.html#a4daf1ef67b547c6be96188a43e5ec05e">GetValueWithDefault</a>(<span class="stringliteral">&quot;RedirectionTargetPointer&quot;</span>, (<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a>*)NULLPTR);</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;    m_behavior = parameters.<a class="code" href="class_name_value_pairs.html#a7ddb654b7afcd1a04422a7b4b01366d9">GetIntValueWithDefault</a>(<span class="stringliteral">&quot;RedirectionBehavior&quot;</span>, <a class="code" href="class_redirector.html#a2de79d5742280aa614c218c7b950de67a9bedf58acdacc835d476e8783c169c2f">PASS_EVERYTHING</a>);</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;    <span class="keywordflow">if</span> (m_target &amp;&amp; GetPassSignals())</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;        m_target-&gt;<a class="code" href="class_buffered_transformation.html#a0dd5456c06e0e47d901e8055b50df929">Initialize</a>(parameters, propagation);</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;}</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;<span class="comment">// *************************************************************</span></div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;</div><div class="line"><a name="l00484"></a><span class="lineno"><a class="line" href="class_proxy_filter.html#a1eb33984fa222e94a7048455fc17ab20">  484</a></span>&#160;<a class="code" href="class_proxy_filter.html#a1eb33984fa222e94a7048455fc17ab20">ProxyFilter::ProxyFilter</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *filter, <span class="keywordtype">size_t</span> firstSize, <span class="keywordtype">size_t</span> lastSize, <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment)</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;    : <a class="code" href="class_filter_with_buffered_input.html">FilterWithBufferedInput</a>(firstSize, 1, lastSize, attachment), m_filter(filter)</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;{</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;    <span class="keywordflow">if</span> (m_filter.get())</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;        m_filter-&gt;<a class="code" href="class_buffered_transformation.html#a9f6cbec970dcb509b23a08fb28b3e055">Attach</a>(<span class="keyword">new</span> <a class="code" href="class_output_proxy.html">OutputProxy</a>(*<span class="keyword">this</span>, <span class="keyword">false</span>));</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;}</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;</div><div class="line"><a name="l00491"></a><span class="lineno"><a class="line" href="class_proxy_filter.html#ae5d15b0c5bcc601a58dde22e01ce9b79">  491</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="class_proxy_filter.html#ae5d15b0c5bcc601a58dde22e01ce9b79">ProxyFilter::IsolatedFlush</a>(<span class="keywordtype">bool</span> hardFlush, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;{</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;    <span class="keywordflow">return</span> m_filter.get() ? m_filter-&gt;<a class="code" href="class_buffered_transformation.html#a8a62b1b6c8f310363f32b05b20c306eb">Flush</a>(hardFlush, -1, blocking) : <span class="keyword">false</span>;</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;}</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;</div><div class="line"><a name="l00496"></a><span class="lineno"><a class="line" href="class_proxy_filter.html#a98a1d161913c42feb64951c396f0f3e0">  496</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_proxy_filter.html#a98a1d161913c42feb64951c396f0f3e0">ProxyFilter::SetFilter</a>(<a class="code" href="class_filter.html">Filter</a> *filter)</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;{</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;    m_filter.reset(filter);</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;    <span class="keywordflow">if</span> (filter)</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;    {</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;        <a class="code" href="class_output_proxy.html">OutputProxy</a> *proxy;</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;        <a class="code" href="classmember__ptr.html">member_ptr&lt;OutputProxy&gt;</a> temp(proxy = <span class="keyword">new</span> <a class="code" href="class_output_proxy.html">OutputProxy</a>(*<span class="keyword">this</span>, <span class="keyword">false</span>));</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;        m_filter-&gt;<a class="code" href="class_buffered_transformation.html#a84c3629cdd9be90695c9701c1b8e24a2">TransferAllTo</a>(*proxy);</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;        m_filter-&gt;<a class="code" href="class_buffered_transformation.html#a9f6cbec970dcb509b23a08fb28b3e055">Attach</a>(temp.release());</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;    }</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;}</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;<span class="keywordtype">void</span> ProxyFilter::NextPutMultiple(<span class="keyword">const</span> byte *s, <span class="keywordtype">size_t</span> len)</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;{</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;    <span class="keywordflow">if</span> (m_filter.get())</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;        m_filter-&gt;<a class="code" href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">Put</a>(s, len);</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;}</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;<span class="keywordtype">void</span> ProxyFilter::NextPutModifiable(byte *s, <span class="keywordtype">size_t</span> len)</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;{</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;    <span class="keywordflow">if</span> (m_filter.get())</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;        m_filter-&gt;<a class="code" href="class_buffered_transformation.html#ae15df84a7b67c25dfe2ce0ef5a74123c">PutModifiable</a>(s, len);</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;}</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;<span class="comment">// *************************************************************</span></div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;</div><div class="line"><a name="l00522"></a><span class="lineno"><a class="line" href="class_random_number_sink.html#ad9eb1681d33e03ebf6ef43dc70299c9e">  522</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_random_number_sink.html#ad9eb1681d33e03ebf6ef43dc70299c9e">RandomNumberSink::IsolatedInitialize</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters)</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;{</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    parameters.<a class="code" href="class_name_value_pairs.html#af28f6e7abf98606d8146bfda271e99db">GetRequiredParameter</a>(<span class="stringliteral">&quot;RandomNumberSink&quot;</span>, <span class="stringliteral">&quot;RandomNumberGeneratorPointer&quot;</span>, m_rng);</div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;}</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;</div><div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="class_random_number_sink.html#aed57770519427841e3aac3abc251bc64">  527</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="class_random_number_sink.html#aed57770519427841e3aac3abc251bc64">RandomNumberSink::Put2</a>(<span class="keyword">const</span> byte *begin, <span class="keywordtype">size_t</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;{</div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;    CRYPTOPP_UNUSED(messageEnd); CRYPTOPP_UNUSED(blocking);</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;    m_rng-&gt;<a class="code" href="class_random_number_generator.html#a6feb4f0afedb62a495b7a9ae311fa1cb">IncorporateEntropy</a>(begin, length);</div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;}</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;</div><div class="line"><a name="l00534"></a><span class="lineno"><a class="line" href="class_array_sink.html#ad3459c605b5eb52fa24efcb4dc35d29d">  534</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="class_array_sink.html#ad3459c605b5eb52fa24efcb4dc35d29d">ArraySink::Put2</a>(<span class="keyword">const</span> byte *begin, <span class="keywordtype">size_t</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;{</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;    CRYPTOPP_UNUSED(messageEnd); CRYPTOPP_UNUSED(blocking);</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;    <span class="comment">// Avoid passing NULL pointer to memcpy. Using memmove due to</span></div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;    <span class="comment">//  Valgrind finding on overlapping buffers.</span></div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;    <span class="keywordtype">size_t</span> copied = 0;</div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;    <span class="keywordflow">if</span> (m_buf &amp;&amp; begin)</div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;    {</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;        copied = <a class="code" href="misc_8h.html#abe412b0409249cb54899e97bc7d86424">STDMIN</a>(length, <a class="code" href="misc_8h.html#a30712a90999ad9d9152975f2e92d46b8">SaturatingSubtract</a>(m_size, m_total));</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;        memmove(m_buf+m_total, begin, copied);</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;    }</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;    m_total += copied;</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;    <span class="keywordflow">return</span> length - copied;</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;}</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;</div><div class="line"><a name="l00550"></a><span class="lineno"><a class="line" href="class_array_sink.html#a535e57a894542c088131bc84955c475b">  550</a></span>&#160;byte * <a class="code" href="class_array_sink.html#a535e57a894542c088131bc84955c475b">ArraySink::CreatePutSpace</a>(<span class="keywordtype">size_t</span> &amp;size)</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;{</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;    size = <a class="code" href="misc_8h.html#a30712a90999ad9d9152975f2e92d46b8">SaturatingSubtract</a>(m_size, m_total);</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;    <span class="keywordflow">return</span> m_buf + m_total;</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;}</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;</div><div class="line"><a name="l00556"></a><span class="lineno"><a class="line" href="class_array_sink.html#a0b677032fc5455f0ad134d4271ac40c3">  556</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_array_sink.html#a0b677032fc5455f0ad134d4271ac40c3">ArraySink::IsolatedInitialize</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters)</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;{</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;    <a class="code" href="class_byte_array_parameter.html">ByteArrayParameter</a> array;</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;    <span class="keywordflow">if</span> (!parameters.<a class="code" href="class_name_value_pairs.html#a5357c3a09602e44671d1e42cb9a9408d">GetValue</a>(<a class="code" href="namespace_name.html#a54b71c75bd8b50e8bddfacf1f7b7b338">Name::OutputBuffer</a>(), array))</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">&quot;ArraySink: missing OutputBuffer argument&quot;</span>);</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;    m_buf = array.<a class="code" href="class_byte_array_parameter.html#a5f4b9c9a11ba16472cec72c56f2787cc">begin</a>();</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;    m_size = array.<a class="code" href="class_byte_array_parameter.html#a4150de4d52b4921633947f06ed7d905d">size</a>();</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;}</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;</div><div class="line"><a name="l00565"></a><span class="lineno"><a class="line" href="class_array_xor_sink.html#a20637eac89903059461b27d621dcc339">  565</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="class_array_xor_sink.html#a20637eac89903059461b27d621dcc339">ArrayXorSink::Put2</a>(<span class="keyword">const</span> byte *begin, <span class="keywordtype">size_t</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;{</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;    CRYPTOPP_UNUSED(messageEnd); CRYPTOPP_UNUSED(blocking);</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;</div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;    <span class="comment">// Avoid passing NULL pointer to xorbuf</span></div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;    <span class="keywordtype">size_t</span> copied = 0;</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    <span class="keywordflow">if</span> (m_buf &amp;&amp; begin)</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    {</div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;        copied = <a class="code" href="misc_8h.html#abe412b0409249cb54899e97bc7d86424">STDMIN</a>(length, <a class="code" href="misc_8h.html#a30712a90999ad9d9152975f2e92d46b8">SaturatingSubtract</a>(m_size, m_total));</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;        <a class="code" href="misc_8h.html#a6aaae7768600b9d735a5e1b8192035f8">xorbuf</a>(m_buf+m_total, begin, copied);</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;    }</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;    m_total += copied;</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;    <span class="keywordflow">return</span> length - copied;</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;}</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;<span class="comment">// *************************************************************</span></div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;</div><div class="line"><a name="l00582"></a><span class="lineno"><a class="line" href="class_stream_transformation_filter.html#a44233434772a4b8eed494dc2dee67ae5">  582</a></span>&#160;<a class="code" href="class_stream_transformation_filter.html#a44233434772a4b8eed494dc2dee67ae5">StreamTransformationFilter::StreamTransformationFilter</a>(<a class="code" href="class_stream_transformation.html">StreamTransformation</a> &amp;c, <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment, <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979">BlockPaddingScheme</a> padding)</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;    : <a class="code" href="class_filter_with_buffered_input.html">FilterWithBufferedInput</a>(attachment), m_cipher(c), m_padding(DEFAULT_PADDING)</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;{</div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;    <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(c.MinLastBlockSize() == 0 || c.MinLastBlockSize() &gt; c.MandatoryBlockSize());</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> authenticatedFilter = <span class="keyword">dynamic_cast&lt;</span><a class="code" href="class_authenticated_symmetric_cipher.html">AuthenticatedSymmetricCipher</a> *<span class="keyword">&gt;</span>(&amp;c) != NULLPTR;</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;    <span class="keywordflow">if</span> (authenticatedFilter)</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">&quot;StreamTransformationFilter: please use AuthenticatedEncryptionFilter and AuthenticatedDecryptionFilter for AuthenticatedSymmetricCipher&quot;</span>);</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;    <span class="comment">// InitializeDerivedAndReturnNewSizes may override some of these</span></div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;    m_mandatoryBlockSize = m_cipher.<a class="code" href="class_stream_transformation.html#ae224d250f716e82c54bc4e4c8930d188">MandatoryBlockSize</a>();</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;    m_optimalBufferSize = m_cipher.<a class="code" href="class_stream_transformation.html#af66ef64545279c01310718af3d627534">OptimalBlockSize</a>();</div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;    m_isSpecial = m_cipher.<a class="code" href="class_stream_transformation.html#a62db1393d64069b282e3d455b38cd0e5">IsLastBlockSpecial</a>() &amp;&amp; m_mandatoryBlockSize &gt; 1;</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;    m_reservedBufferSize = <a class="code" href="misc_8h.html#af1490597cb11989e78d5ba5b5f21266b">STDMAX</a>(2*m_mandatoryBlockSize, m_optimalBufferSize);</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;    <a class="code" href="class_filter_with_buffered_input.html#ae97be71708e0020167e5c08856fd3f3b">IsolatedInitialize</a>(<a class="code" href="algparam_8h.html#aa13eee74de98cf8aaa7e83f4fae7f28b">MakeParameters</a>(<a class="code" href="namespace_name.html#a48820945ba488fac5d5507eea9a5114e">Name::BlockPaddingScheme</a>(), padding));</div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;}</div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;<a class="code" href="class_stream_transformation_filter.html#a44233434772a4b8eed494dc2dee67ae5">StreamTransformationFilter::StreamTransformationFilter</a>(<a class="code" href="class_stream_transformation.html">StreamTransformation</a> &amp;c, <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment, <a class="code" href="namespace_name.html#a48820945ba488fac5d5507eea9a5114e">BlockPaddingScheme</a> padding, <span class="keywordtype">bool</span> authenticated)</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;    : <a class="code" href="class_filter_with_buffered_input.html">FilterWithBufferedInput</a>(attachment), m_cipher(c), m_padding(DEFAULT_PADDING)</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;{</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> authenticatedFilter = <span class="keyword">dynamic_cast&lt;</span><a class="code" href="class_authenticated_symmetric_cipher.html">AuthenticatedSymmetricCipher</a> *<span class="keyword">&gt;</span>(&amp;c) != NULLPTR;</div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;    <span class="keywordflow">if</span> (!authenticatedFilter)</div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;    {</div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;        <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(c.MinLastBlockSize() == 0 || c.MinLastBlockSize() &gt; c.MandatoryBlockSize());</div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;    }</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;    <span class="keywordflow">if</span> (authenticatedFilter &amp;&amp; !authenticated)</div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">&quot;StreamTransformationFilter: please use AuthenticatedEncryptionFilter and AuthenticatedDecryptionFilter for AuthenticatedSymmetricCipher&quot;</span>);</div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;    <span class="comment">// InitializeDerivedAndReturnNewSizes may override some of these</span></div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;    m_mandatoryBlockSize = m_cipher.<a class="code" href="class_stream_transformation.html#ae224d250f716e82c54bc4e4c8930d188">MandatoryBlockSize</a>();</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;    m_optimalBufferSize = m_cipher.<a class="code" href="class_stream_transformation.html#af66ef64545279c01310718af3d627534">OptimalBlockSize</a>();</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    m_isSpecial = m_cipher.<a class="code" href="class_stream_transformation.html#a62db1393d64069b282e3d455b38cd0e5">IsLastBlockSpecial</a>() &amp;&amp; m_mandatoryBlockSize &gt; 1;</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;    m_reservedBufferSize = <a class="code" href="misc_8h.html#af1490597cb11989e78d5ba5b5f21266b">STDMAX</a>(2*m_mandatoryBlockSize, m_optimalBufferSize);</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;    <a class="code" href="class_filter_with_buffered_input.html#ae97be71708e0020167e5c08856fd3f3b">IsolatedInitialize</a>(<a class="code" href="algparam_8h.html#aa13eee74de98cf8aaa7e83f4fae7f28b">MakeParameters</a>(<a class="code" href="namespace_name.html#a48820945ba488fac5d5507eea9a5114e">Name::BlockPaddingScheme</a>(), padding));</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;}</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;<span class="keywordtype">size_t</span> StreamTransformationFilter::LastBlockSize(<a class="code" href="class_stream_transformation.html">StreamTransformation</a> &amp;c, <a class="code" href="namespace_name.html#a48820945ba488fac5d5507eea9a5114e">BlockPaddingScheme</a> padding)</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;{</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;    <span class="keywordflow">if</span> (c.MinLastBlockSize() &gt; 0)</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;        <span class="keywordflow">return</span> c.MinLastBlockSize();</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c.MandatoryBlockSize() &gt; 1 &amp;&amp; !c.IsForwardTransformation() &amp;&amp; padding != <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979ad929ced62ab4871b2d9b87cab0b47887">NO_PADDING</a> &amp;&amp; padding != <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979ae6ae59c8e974534a292a2f0b11131f08">ZEROS_PADDING</a>)</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;        <span class="keywordflow">return</span> c.MandatoryBlockSize();</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;}</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;<span class="keywordtype">void</span> StreamTransformationFilter::InitializeDerivedAndReturnNewSizes(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters, <span class="keywordtype">size_t</span> &amp;firstSize, <span class="keywordtype">size_t</span> &amp;blockSize, <span class="keywordtype">size_t</span> &amp;lastSize)</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;{</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;    <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979">BlockPaddingScheme</a> padding = parameters.<a class="code" href="class_name_value_pairs.html#a4daf1ef67b547c6be96188a43e5ec05e">GetValueWithDefault</a>(<a class="code" href="namespace_name.html#a48820945ba488fac5d5507eea9a5114e">Name::BlockPaddingScheme</a>(), <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979a0ae39772a46aee3e0dbf3e91afff751c">DEFAULT_PADDING</a>);</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;    <span class="keywordtype">bool</span> isBlockCipher = (m_mandatoryBlockSize &gt; 1 &amp;&amp; m_cipher.<a class="code" href="class_stream_transformation.html#a0b7c5bc41b9b5f6443ee32d65ebc044c">MinLastBlockSize</a>() == 0);</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;    <span class="keywordflow">if</span> (padding == <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979a0ae39772a46aee3e0dbf3e91afff751c">DEFAULT_PADDING</a>)</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;        m_padding = isBlockCipher ? <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979a622df395c2f0edc35f722d938faaad1f">PKCS_PADDING</a> : <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979ad929ced62ab4871b2d9b87cab0b47887">NO_PADDING</a>;</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;        m_padding = padding;</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;    <span class="keywordflow">if</span> (!isBlockCipher)</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;    {</div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;        <span class="keywordflow">if</span> (m_padding == <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979a622df395c2f0edc35f722d938faaad1f">PKCS_PADDING</a>)</div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">&quot;StreamTransformationFilter: PKCS_PADDING cannot be used with &quot;</span> + m_cipher.<a class="code" href="class_algorithm.html#a4f31510a192d1121856efe8ad0a9b844">AlgorithmName</a>());</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m_padding == <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979a33d1ed83310e9d60f606a60af3cc6559">W3C_PADDING</a>)</div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">&quot;StreamTransformationFilter: W3C_PADDING cannot be used with &quot;</span> + m_cipher.<a class="code" href="class_algorithm.html#a4f31510a192d1121856efe8ad0a9b844">AlgorithmName</a>());</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m_padding == <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979a77a93fa2940abd30d0678927ab6f3587">ONE_AND_ZEROS_PADDING</a>)</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">&quot;StreamTransformationFilter: ONE_AND_ZEROS_PADDING cannot be used with &quot;</span> + m_cipher.<a class="code" href="class_algorithm.html#a4f31510a192d1121856efe8ad0a9b844">AlgorithmName</a>());</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;    }</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;    firstSize = 0;</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;    blockSize = m_mandatoryBlockSize;</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;    lastSize = LastBlockSize(m_cipher, m_padding);</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;}</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;<span class="keywordtype">void</span> StreamTransformationFilter::FirstPut(<span class="keyword">const</span> byte* inString)</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;{</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;    CRYPTOPP_UNUSED(inString);</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;    m_optimalBufferSize = STDMAX&lt;unsigned int&gt;(m_optimalBufferSize, <a class="code" href="misc_8h.html#aa2ac57210cb6796eced074e6d2e294fb">RoundDownToMultipleOf</a>(4096U, m_optimalBufferSize));</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;}</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;<span class="keywordtype">void</span> StreamTransformationFilter::NextPutMultiple(<span class="keyword">const</span> byte *inString, <span class="keywordtype">size_t</span> length)</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;{</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;    <span class="keywordflow">if</span> (!length)</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;        {<span class="keywordflow">return</span>;}</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> s = m_cipher.<a class="code" href="class_stream_transformation.html#ae224d250f716e82c54bc4e4c8930d188">MandatoryBlockSize</a>();</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;    <span class="keywordflow">do</span></div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;    {</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;        <span class="keywordtype">size_t</span> len = m_optimalBufferSize;</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;        byte *space = <a class="code" href="struct_filter_put_space_helper.html#a85fea9f0455741e4b340a3e035df9a39">HelpCreatePutSpace</a>(*<a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>(), <a class="code" href="cryptlib_8h.html#a9a69ab5a5e0f58279c43f4f51809c84a">DEFAULT_CHANNEL</a>, s, length, len);</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;        <span class="keywordflow">if</span> (len &lt; length)</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;        {</div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;            <span class="keywordflow">if</span> (len == m_optimalBufferSize)</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;                len -= m_cipher.<a class="code" href="class_stream_transformation.html#ab8422f6eee08fbc70069e222186e90de">GetOptimalBlockSizeUsed</a>();</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;            len = <a class="code" href="misc_8h.html#aa2ac57210cb6796eced074e6d2e294fb">RoundDownToMultipleOf</a>(len, s);</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;        }</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;            len = length;</div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;        m_cipher.<a class="code" href="class_stream_transformation.html#ac00f3fcc21f33f11c8efa4de67ff7774">ProcessString</a>(space, inString, len);</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;        <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae15df84a7b67c25dfe2ce0ef5a74123c">PutModifiable</a>(space, len);</div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;        inString += len;</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;        length -= len;</div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;    }</div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;    <span class="keywordflow">while</span> (length &gt; 0);</div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;}</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;</div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;<span class="keywordtype">void</span> StreamTransformationFilter::NextPutModifiable(byte *inString, <span class="keywordtype">size_t</span> length)</div><div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;{</div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;    m_cipher.<a class="code" href="class_stream_transformation.html#ac00f3fcc21f33f11c8efa4de67ff7774">ProcessString</a>(inString, length);</div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;    <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae15df84a7b67c25dfe2ce0ef5a74123c">PutModifiable</a>(inString, length);</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;}</div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;</div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;<span class="keywordtype">void</span> StreamTransformationFilter::LastPut(<span class="keyword">const</span> byte *inString, <span class="keywordtype">size_t</span> length)</div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;{</div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;    byte *space = NULLPTR;</div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;<span class="preprocessor">#if 1</span></div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;    <span class="comment">// This block is new to StreamTransformationFilter. It somewhat of a hack and was added</span></div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;    <span class="comment">//  for OCB mode; see GitHub Issue 515. The rub with OCB is, its a block cipher and the</span></div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;    <span class="comment">//  last block size can be 0. However, &quot;last block = 0&quot; is not the 0 predacted in the</span></div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;    <span class="comment">//  original code. In the orginal code 0 means &quot;nothing special&quot; so DEFAULT_PADDING is</span></div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;    <span class="comment">//  applied. OCB&#39;s 0 literally means a final block size can be 0 or non-0; and no padding</span></div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;    <span class="comment">//  is needed in either case because OCB has its own scheme (see handling of P_* and A_*).</span></div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;    <span class="comment">// Stream ciphers have policy objects to convey how to operate the cipher. The Crypto++</span></div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;    <span class="comment">//  framework operates well when MinLastBlockSize() is 1. However, it did not appear to</span></div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;    <span class="comment">//  cover the OCB case either because we can&#39;t stream OCB. It needs full block sizes. In</span></div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;    <span class="comment">//  response we hacked a IsLastBlockSpecial(). When true StreamTransformationFilter</span></div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;    <span class="comment">//  defers to the mode for processing of the last block.</span></div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;    <span class="comment">// The behavior supplied when IsLastBlockSpecial() will likely have to evolve to capture</span></div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;    <span class="comment">//  more complex cases from different authenc modes. I suspect it will have to change</span></div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;    <span class="comment">//  from a simple bool to something that conveys more information, like &quot;last block</span></div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;    <span class="comment">//  no padding&quot; or &quot;custom padding applied by cipher&quot;.</span></div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;    <span class="comment">// In some respect we have already hit the need for more information. For example, OCB</span></div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;    <span class="comment">//  calculates the checksum on the cipher text at the same time, so we don&#39;t need the</span></div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;    <span class="comment">//  disjoint behavior of calling &quot;EncryptBlock&quot; followed by a separate &quot;AuthenticateBlock&quot;.</span></div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;    <span class="comment">//  Additional information may allow us to avoid the two spearate calls.</span></div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;    <span class="keywordflow">if</span> (m_isSpecial)</div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;    {</div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> leftOver = length % m_mandatoryBlockSize;</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;        space = <a class="code" href="struct_filter_put_space_helper.html#a85fea9f0455741e4b340a3e035df9a39">HelpCreatePutSpace</a>(*<a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>(), <a class="code" href="cryptlib_8h.html#a9a69ab5a5e0f58279c43f4f51809c84a">DEFAULT_CHANNEL</a>, m_reservedBufferSize);</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;</div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;        length -= leftOver;</div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;        <span class="keywordflow">if</span> (length)</div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;        {</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;            <span class="comment">// Process full blocks</span></div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;            m_cipher.<a class="code" href="class_stream_transformation.html#a26feabde21bc4d1783195969733e3bb0">ProcessData</a>(space, inString, length);</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;            <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">Put</a>(space, length);</div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;            inString += length;</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;        }</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;</div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;        <span class="keywordflow">if</span> (leftOver)</div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;        {</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;            <span class="comment">// Process final partial block</span></div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;            length = m_cipher.<a class="code" href="class_stream_transformation.html#af48589443f77f4ed9ff185f9c1a26cbf">ProcessLastBlock</a>(space, m_reservedBufferSize, inString, leftOver);</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;            <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">Put</a>(space, length);</div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;        }</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;        {</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;            <span class="comment">// Process final empty block</span></div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;            length = m_cipher.<a class="code" href="class_stream_transformation.html#af48589443f77f4ed9ff185f9c1a26cbf">ProcessLastBlock</a>(space, m_reservedBufferSize, NULLPTR, 0);</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;            <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">Put</a>(space, length);</div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;        }</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;</div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;    }</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;</div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;    <span class="keywordflow">switch</span> (m_padding)</div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;    {</div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979ad929ced62ab4871b2d9b87cab0b47887">NO_PADDING</a>:</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979ae6ae59c8e974534a292a2f0b11131f08">ZEROS_PADDING</a>:</div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;        <span class="keywordflow">if</span> (length &gt; 0)</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;        {</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">size_t</span> minLastBlockSize = m_cipher.<a class="code" href="class_stream_transformation.html#a0b7c5bc41b9b5f6443ee32d65ebc044c">MinLastBlockSize</a>();</div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">bool</span> isForwardTransformation = m_cipher.<a class="code" href="class_stream_transformation.html#a3244f76963a12a5ab6112326c7af9724">IsForwardTransformation</a>();</div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;</div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;            <span class="keywordflow">if</span> (isForwardTransformation &amp;&amp; m_padding == <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979ae6ae59c8e974534a292a2f0b11131f08">ZEROS_PADDING</a> &amp;&amp; (minLastBlockSize == 0 || length &lt; minLastBlockSize))</div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;            {</div><div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;                <span class="comment">// do padding</span></div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;                <span class="keywordtype">size_t</span> blockSize = <a class="code" href="misc_8h.html#af1490597cb11989e78d5ba5b5f21266b">STDMAX</a>(minLastBlockSize, (<span class="keywordtype">size_t</span>)m_mandatoryBlockSize);</div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;                space = <a class="code" href="struct_filter_put_space_helper.html#a85fea9f0455741e4b340a3e035df9a39">HelpCreatePutSpace</a>(*<a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>(), <a class="code" href="cryptlib_8h.html#a9a69ab5a5e0f58279c43f4f51809c84a">DEFAULT_CHANNEL</a>, blockSize);</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;                <span class="keywordflow">if</span> (inString) {memcpy(space, inString, length);}</div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;                memset(space + length, 0, blockSize - length);</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;                <span class="keywordtype">size_t</span> used = m_cipher.<a class="code" href="class_stream_transformation.html#af48589443f77f4ed9ff185f9c1a26cbf">ProcessLastBlock</a>(space, blockSize, space, blockSize);</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;                <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">Put</a>(space, used);</div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;            }</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;            {</div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;                <span class="keywordflow">if</span> (minLastBlockSize == 0)</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;                {</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;                    <span class="keywordflow">if</span> (isForwardTransformation)</div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;                        <span class="keywordflow">throw</span> <a class="code" href="class_invalid_data_format.html">InvalidDataFormat</a>(<span class="stringliteral">&quot;StreamTransformationFilter: plaintext length is not a multiple of block size and NO_PADDING is specified&quot;</span>);</div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;                    <span class="keywordflow">else</span></div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;                        <span class="keywordflow">throw</span> <a class="code" href="class_invalid_ciphertext.html">InvalidCiphertext</a>(<span class="stringliteral">&quot;StreamTransformationFilter: ciphertext length is not a multiple of block size&quot;</span>);</div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;                }</div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;</div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;                space = <a class="code" href="struct_filter_put_space_helper.html#a85fea9f0455741e4b340a3e035df9a39">HelpCreatePutSpace</a>(*<a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>(), <a class="code" href="cryptlib_8h.html#a9a69ab5a5e0f58279c43f4f51809c84a">DEFAULT_CHANNEL</a>, length, m_optimalBufferSize);</div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;                <span class="keywordtype">size_t</span> used = m_cipher.<a class="code" href="class_stream_transformation.html#af48589443f77f4ed9ff185f9c1a26cbf">ProcessLastBlock</a>(space, length, inString, length);</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;                <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">Put</a>(space, used);</div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;            }</div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;        }</div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;</div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979a622df395c2f0edc35f722d938faaad1f">PKCS_PADDING</a>:</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979a33d1ed83310e9d60f606a60af3cc6559">W3C_PADDING</a>:</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979a77a93fa2940abd30d0678927ab6f3587">ONE_AND_ZEROS_PADDING</a>:</div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> s;</div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;        s = m_mandatoryBlockSize;</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;        <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(s &gt; 1);</div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;        space = <a class="code" href="struct_filter_put_space_helper.html#a85fea9f0455741e4b340a3e035df9a39">HelpCreatePutSpace</a>(*<a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>(), <a class="code" href="cryptlib_8h.html#a9a69ab5a5e0f58279c43f4f51809c84a">DEFAULT_CHANNEL</a>, s, m_optimalBufferSize);</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;        <span class="keywordflow">if</span> (m_cipher.<a class="code" href="class_stream_transformation.html#a3244f76963a12a5ab6112326c7af9724">IsForwardTransformation</a>())</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;        {</div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;            <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(length &lt; s);</div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;            <span class="keywordflow">if</span> (inString) {memcpy(space, inString, length);}</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;            <span class="keywordflow">if</span> (m_padding == <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979a622df395c2f0edc35f722d938faaad1f">PKCS_PADDING</a>)</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;            {</div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;                <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(s &lt; 256);</div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;                byte pad = <span class="keyword">static_cast&lt;</span>byte<span class="keyword">&gt;</span>(s-length);</div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;                memset(space+length, pad, s-length);</div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;            }</div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m_padding == <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979a33d1ed83310e9d60f606a60af3cc6559">W3C_PADDING</a>)</div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;            {</div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;                <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(s &lt; 256);</div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;                memset(space+length, 0, s-length-1);</div><div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;                space[s-1] = <span class="keyword">static_cast&lt;</span>byte<span class="keyword">&gt;</span>(s-length);</div><div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;            }</div><div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;            {</div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;                space[length] = 0x80;</div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;                memset(space+length+1, 0, s-length-1);</div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;            }</div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;            m_cipher.<a class="code" href="class_stream_transformation.html#a26feabde21bc4d1783195969733e3bb0">ProcessData</a>(space, space, s);</div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;            <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">Put</a>(space, s);</div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;        }</div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;        {</div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;            <span class="keywordflow">if</span> (length != s)</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;                <span class="keywordflow">throw</span> <a class="code" href="class_invalid_ciphertext.html">InvalidCiphertext</a>(<span class="stringliteral">&quot;StreamTransformationFilter: ciphertext length is not a multiple of block size&quot;</span>);</div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;            m_cipher.<a class="code" href="class_stream_transformation.html#a26feabde21bc4d1783195969733e3bb0">ProcessData</a>(space, inString, s);</div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;            <span class="keywordflow">if</span> (m_padding == <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979a622df395c2f0edc35f722d938faaad1f">PKCS_PADDING</a>)</div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;            {</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;                byte pad = space[s-1];</div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;                                <span class="keywordflow">if</span> (pad &lt; 1 || pad &gt; s || <a class="code" href="misc_8h.html#ab29e4cf4553b1ff9f884df223a2abd6a">FindIfNot</a>(space+s-pad, space+s, pad) != space+s)</div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;                                    <span class="keywordflow">throw</span> <a class="code" href="class_invalid_ciphertext.html">InvalidCiphertext</a>(<span class="stringliteral">&quot;StreamTransformationFilter: invalid PKCS #7 block padding found&quot;</span>);</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;                length = s-pad;</div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;            }</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m_padding == <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979a33d1ed83310e9d60f606a60af3cc6559">W3C_PADDING</a>)</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;            {</div><div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;                byte pad = space[s - 1];</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;                <span class="keywordflow">if</span> (pad &lt; 1 || pad &gt; s)</div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;                    <span class="keywordflow">throw</span> <a class="code" href="class_invalid_ciphertext.html">InvalidCiphertext</a>(<span class="stringliteral">&quot;StreamTransformationFilter: invalid W3C block padding found&quot;</span>);</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;                length = s - pad;</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;            }</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;            {</div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;                <span class="keywordflow">while</span> (length &gt; 1 &amp;&amp; space[length-1] == 0)</div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;                    --length;</div><div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;                <span class="keywordflow">if</span> (space[--length] != 0x80)</div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;                    <span class="keywordflow">throw</span> <a class="code" href="class_invalid_ciphertext.html">InvalidCiphertext</a>(<span class="stringliteral">&quot;StreamTransformationFilter: invalid ones-and-zeros padding found&quot;</span>);</div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;            }</div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;            <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">Put</a>(space, length);</div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;        }</div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;        <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;    }</div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;}</div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;</div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;<span class="comment">// *************************************************************</span></div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;</div><div class="line"><a name="l00853"></a><span class="lineno"><a class="line" href="class_hash_filter.html#a58b9949a468e798cc97d7b4c59a9d8c2">  853</a></span>&#160;<a class="code" href="class_hash_filter.html#a58b9949a468e798cc97d7b4c59a9d8c2">HashFilter::HashFilter</a>(<a class="code" href="class_hash_transformation.html">HashTransformation</a> &amp;hm, <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment, <span class="keywordtype">bool</span> putMessage, <span class="keywordtype">int</span> truncatedDigestSize, <span class="keyword">const</span> std::string &amp;messagePutChannel, <span class="keyword">const</span> std::string &amp;hashPutChannel)</div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;    : m_hashModule(hm), m_putMessage(putMessage), m_digestSize(0), m_space(NULLPTR)</div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;    , m_messagePutChannel(messagePutChannel), m_hashPutChannel(hashPutChannel)</div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;{</div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;    m_digestSize = truncatedDigestSize &lt; 0 ? m_hashModule.<a class="code" href="class_hash_transformation.html#a9f42cc280bac76b884ad12615c0dabb5">DigestSize</a>() : truncatedDigestSize;</div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;    <a class="code" href="class_filter.html#a93817876b45172108fe0342de6442f75">Detach</a>(attachment);</div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;}</div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;</div><div class="line"><a name="l00861"></a><span class="lineno"><a class="line" href="class_hash_filter.html#a950c5cc22d2aa101e731401b10ff2be4">  861</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_hash_filter.html#a950c5cc22d2aa101e731401b10ff2be4">HashFilter::IsolatedInitialize</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters)</div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;{</div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;    m_putMessage = parameters.<a class="code" href="class_name_value_pairs.html#a4daf1ef67b547c6be96188a43e5ec05e">GetValueWithDefault</a>(<a class="code" href="namespace_name.html#ac588f444a195914b81ba67aaf0019735">Name::PutMessage</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;    <span class="keywordtype">int</span> s = parameters.<a class="code" href="class_name_value_pairs.html#a7ddb654b7afcd1a04422a7b4b01366d9">GetIntValueWithDefault</a>(<a class="code" href="namespace_name.html#a0200d7e5692b4343517eb57b1fb9e0f2">Name::TruncatedDigestSize</a>(), -1);</div><div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;    m_digestSize = s &lt; 0 ? m_hashModule.<a class="code" href="class_hash_transformation.html#a9f42cc280bac76b884ad12615c0dabb5">DigestSize</a>() : s;</div><div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;}</div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;</div><div class="line"><a name="l00868"></a><span class="lineno"><a class="line" href="class_hash_filter.html#a7dde1304b794c488f43cb60f8bbf7b66">  868</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="class_hash_filter.html#a7dde1304b794c488f43cb60f8bbf7b66">HashFilter::Put2</a>(<span class="keyword">const</span> byte *inString, <span class="keywordtype">size_t</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;{</div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;    FILTER_BEGIN;</div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;    <span class="keywordflow">if</span> (m_putMessage)</div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;        FILTER_OUTPUT3(1, 0, inString, length, 0, m_messagePutChannel);</div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;    <span class="keywordflow">if</span> (inString &amp;&amp; length)</div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;        m_hashModule.<a class="code" href="class_hash_transformation.html#aafabefaf445b65d3ba0d8e1c0294afe5">Update</a>(inString, length);</div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;    <span class="keywordflow">if</span> (messageEnd)</div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;    {</div><div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;        {</div><div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;            <span class="keywordtype">size_t</span> size;</div><div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;            m_space = <a class="code" href="struct_filter_put_space_helper.html#a85fea9f0455741e4b340a3e035df9a39">HelpCreatePutSpace</a>(*<a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>(), m_hashPutChannel, m_digestSize, m_digestSize, size = m_digestSize);</div><div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;            m_hashModule.<a class="code" href="class_hash_transformation.html#a590ecda344aa0fb045abf42ec08823b2">TruncatedFinal</a>(m_space, m_digestSize);</div><div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;        }</div><div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;        FILTER_OUTPUT3(2, 0, m_space, m_digestSize, messageEnd, m_hashPutChannel);</div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;    }</div><div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;    FILTER_END_NO_MESSAGE_END;</div><div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;}</div><div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;</div><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;<span class="comment">// *************************************************************</span></div><div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;</div><div class="line"><a name="l00889"></a><span class="lineno"><a class="line" href="class_hash_verification_filter.html#a27983e6af704b2f42ec10c76cc70efe0">  889</a></span>&#160;<a class="code" href="class_hash_verification_filter.html#a27983e6af704b2f42ec10c76cc70efe0">HashVerificationFilter::HashVerificationFilter</a>(<a class="code" href="class_hash_transformation.html">HashTransformation</a> &amp;hm, <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment, word32 flags, <span class="keywordtype">int</span> truncatedDigestSize)</div><div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;    : <a class="code" href="class_filter_with_buffered_input.html">FilterWithBufferedInput</a>(attachment)</div><div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;    , m_hashModule(hm), m_flags(0), m_digestSize(0), m_verified(false)</div><div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;{</div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;    <a class="code" href="class_filter_with_buffered_input.html#ae97be71708e0020167e5c08856fd3f3b">IsolatedInitialize</a>(<a class="code" href="algparam_8h.html#aa13eee74de98cf8aaa7e83f4fae7f28b">MakeParameters</a>(<a class="code" href="namespace_name.html#a64f4bf06f3cd4ae2b99697f5d39bf768">Name::HashVerificationFilterFlags</a>(), flags)(<a class="code" href="namespace_name.html#a0200d7e5692b4343517eb57b1fb9e0f2">Name::TruncatedDigestSize</a>(), truncatedDigestSize));</div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;}</div><div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;</div><div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;<span class="keywordtype">void</span> HashVerificationFilter::InitializeDerivedAndReturnNewSizes(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters, <span class="keywordtype">size_t</span> &amp;firstSize, <span class="keywordtype">size_t</span> &amp;blockSize, <span class="keywordtype">size_t</span> &amp;lastSize)</div><div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;{</div><div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;    m_flags = parameters.<a class="code" href="class_name_value_pairs.html#a4daf1ef67b547c6be96188a43e5ec05e">GetValueWithDefault</a>(<a class="code" href="namespace_name.html#a64f4bf06f3cd4ae2b99697f5d39bf768">Name::HashVerificationFilterFlags</a>(), (word32)<a class="code" href="class_hash_verification_filter.html#a4e171785f3f9b00d0a10f4c2afa1cc70a036f9abd0e6bf25ca9d0e2e9141e505b">DEFAULT_FLAGS</a>);</div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;    <span class="keywordtype">int</span> s = parameters.<a class="code" href="class_name_value_pairs.html#a7ddb654b7afcd1a04422a7b4b01366d9">GetIntValueWithDefault</a>(<a class="code" href="namespace_name.html#a0200d7e5692b4343517eb57b1fb9e0f2">Name::TruncatedDigestSize</a>(), -1);</div><div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;    m_digestSize = s &lt; 0 ? m_hashModule.<a class="code" href="class_hash_transformation.html#a9f42cc280bac76b884ad12615c0dabb5">DigestSize</a>() : s;</div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;    m_verified = <span class="keyword">false</span>;</div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;    firstSize = m_flags &amp; <a class="code" href="class_hash_verification_filter.html#a4e171785f3f9b00d0a10f4c2afa1cc70a3974fb63ec975408ce7ab672d99ee004">HASH_AT_BEGIN</a> ? m_digestSize : 0;</div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;    blockSize = 1;</div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;    lastSize = m_flags &amp; <a class="code" href="class_hash_verification_filter.html#a4e171785f3f9b00d0a10f4c2afa1cc70a3974fb63ec975408ce7ab672d99ee004">HASH_AT_BEGIN</a> ? 0 : m_digestSize;</div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;}</div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;</div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;<span class="keywordtype">void</span> HashVerificationFilter::FirstPut(<span class="keyword">const</span> byte *inString)</div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;{</div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;    <span class="keywordflow">if</span> (m_flags &amp; <a class="code" href="class_hash_verification_filter.html#a4e171785f3f9b00d0a10f4c2afa1cc70a3974fb63ec975408ce7ab672d99ee004">HASH_AT_BEGIN</a>)</div><div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;    {</div><div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;        m_expectedHash.<a class="code" href="class_sec_block.html#a90d46e577c951d81a2d25a4742a3e979">New</a>(m_digestSize);</div><div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;        <span class="keywordflow">if</span> (inString) {memcpy(m_expectedHash, inString, m_expectedHash.<a class="code" href="class_sec_block.html#af5999bffe3193e62719cc0792b0282a7">size</a>());}</div><div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;        <span class="keywordflow">if</span> (m_flags &amp; <a class="code" href="class_hash_verification_filter.html#a4e171785f3f9b00d0a10f4c2afa1cc70a9b5a23f94ba704e8fa6b801a1a813de6">PUT_HASH</a>)</div><div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;            <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">Put</a>(inString, m_expectedHash.<a class="code" href="class_sec_block.html#af5999bffe3193e62719cc0792b0282a7">size</a>());</div><div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;    }</div><div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;}</div><div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;</div><div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;<span class="keywordtype">void</span> HashVerificationFilter::NextPutMultiple(<span class="keyword">const</span> byte *inString, <span class="keywordtype">size_t</span> length)</div><div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;{</div><div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;    m_hashModule.<a class="code" href="class_hash_transformation.html#aafabefaf445b65d3ba0d8e1c0294afe5">Update</a>(inString, length);</div><div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;    <span class="keywordflow">if</span> (m_flags &amp; <a class="code" href="class_hash_verification_filter.html#a4e171785f3f9b00d0a10f4c2afa1cc70aaba5187c6265a8684096f2b4d4bfa9d1">PUT_MESSAGE</a>)</div><div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;        <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">Put</a>(inString, length);</div><div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;}</div><div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;</div><div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;<span class="keywordtype">void</span> HashVerificationFilter::LastPut(<span class="keyword">const</span> byte *inString, <span class="keywordtype">size_t</span> length)</div><div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;{</div><div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;    <span class="keywordflow">if</span> (m_flags &amp; <a class="code" href="class_hash_verification_filter.html#a4e171785f3f9b00d0a10f4c2afa1cc70a3974fb63ec975408ce7ab672d99ee004">HASH_AT_BEGIN</a>)</div><div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;    {</div><div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;        <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(length == 0);</div><div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;        m_verified = m_hashModule.<a class="code" href="class_hash_transformation.html#a0f6069eadf492d970c3eb8cdf656e742">TruncatedVerify</a>(m_expectedHash, m_digestSize);</div><div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;    }</div><div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;    {</div><div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;        m_verified = (length==m_digestSize &amp;&amp; m_hashModule.<a class="code" href="class_hash_transformation.html#a0f6069eadf492d970c3eb8cdf656e742">TruncatedVerify</a>(inString, length));</div><div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;        <span class="keywordflow">if</span> (m_flags &amp; <a class="code" href="class_hash_verification_filter.html#a4e171785f3f9b00d0a10f4c2afa1cc70a9b5a23f94ba704e8fa6b801a1a813de6">PUT_HASH</a>)</div><div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;            <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">Put</a>(inString, length);</div><div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;    }</div><div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;</div><div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;    <span class="keywordflow">if</span> (m_flags &amp; <a class="code" href="class_hash_verification_filter.html#a4e171785f3f9b00d0a10f4c2afa1cc70ac27995bd5aca3bef2fc7863c1a5bbe0b">PUT_RESULT</a>)</div><div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;        <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">Put</a>(m_verified);</div><div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;</div><div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;    <span class="keywordflow">if</span> ((m_flags &amp; <a class="code" href="class_hash_verification_filter.html#a4e171785f3f9b00d0a10f4c2afa1cc70a56c0daa4f424032c82a53d8dcdf78c55">THROW_EXCEPTION</a>) &amp;&amp; !m_verified)</div><div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;        <span class="keywordflow">throw</span> HashVerificationFailed();</div><div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;}</div><div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;</div><div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;<span class="comment">// *************************************************************</span></div><div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;</div><div class="line"><a name="l00948"></a><span class="lineno"><a class="line" href="class_authenticated_encryption_filter.html#ab50017b68574475d37fc726717fde546">  948</a></span>&#160;<a class="code" href="class_authenticated_encryption_filter.html#ab50017b68574475d37fc726717fde546">AuthenticatedEncryptionFilter::AuthenticatedEncryptionFilter</a>(<a class="code" href="class_authenticated_symmetric_cipher.html">AuthenticatedSymmetricCipher</a> &amp;c, <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment,</div><div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;                                <span class="keywordtype">bool</span> putAAD, <span class="keywordtype">int</span> truncatedDigestSize, <span class="keyword">const</span> std::string &amp;macChannel, <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979">BlockPaddingScheme</a> padding)</div><div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;    : <a class="code" href="class_stream_transformation_filter.html">StreamTransformationFilter</a>(c, attachment, padding, true)</div><div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;    , m_hf(c, new <a class="code" href="class_output_proxy.html">OutputProxy</a>(*this, false), putAAD, truncatedDigestSize, <a class="code" href="cryptlib_8h.html#aff60e2d96212d25c078c2dd11e45de0e">AAD_CHANNEL</a>, macChannel)</div><div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;{</div><div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;    <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(c.IsForwardTransformation());</div><div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;}</div><div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;</div><div class="line"><a name="l00956"></a><span class="lineno"><a class="line" href="class_authenticated_encryption_filter.html#aad275712b531d24e3ac4d332d46f1dd4">  956</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_authenticated_encryption_filter.html#aad275712b531d24e3ac4d332d46f1dd4">AuthenticatedEncryptionFilter::IsolatedInitialize</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters)</div><div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;{</div><div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;    m_hf.<a class="code" href="class_hash_filter.html#a950c5cc22d2aa101e731401b10ff2be4">IsolatedInitialize</a>(parameters);</div><div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;    <a class="code" href="class_filter_with_buffered_input.html#ae97be71708e0020167e5c08856fd3f3b">StreamTransformationFilter::IsolatedInitialize</a>(parameters);</div><div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;}</div><div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;</div><div class="line"><a name="l00962"></a><span class="lineno"><a class="line" href="class_authenticated_encryption_filter.html#a7e50639e227b5a0f6f184a69e6d48642">  962</a></span>&#160;byte * <a class="code" href="class_authenticated_encryption_filter.html#a7e50639e227b5a0f6f184a69e6d48642">AuthenticatedEncryptionFilter::ChannelCreatePutSpace</a>(<span class="keyword">const</span> std::string &amp;channel, <span class="keywordtype">size_t</span> &amp;size)</div><div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;{</div><div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;    <span class="keywordflow">if</span> (channel.empty())</div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="class_buffered_transformation.html#af390325c959c3d6a2c03a447d6cd469d">StreamTransformationFilter::CreatePutSpace</a>(size);</div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;</div><div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;    <span class="keywordflow">if</span> (channel == <a class="code" href="cryptlib_8h.html#aff60e2d96212d25c078c2dd11e45de0e">AAD_CHANNEL</a>)</div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;        <span class="keywordflow">return</span> m_hf.<a class="code" href="class_hash_filter.html#a5c2f3a90ced66c835969ce1aa235b63e">CreatePutSpace</a>(size);</div><div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;</div><div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;    <span class="keywordflow">throw</span> <a class="code" href="struct_buffered_transformation_1_1_invalid_channel_name.html">InvalidChannelName</a>(<span class="stringliteral">&quot;AuthenticatedEncryptionFilter&quot;</span>, channel);</div><div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;}</div><div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;</div><div class="line"><a name="l00973"></a><span class="lineno"><a class="line" href="class_authenticated_encryption_filter.html#a061422f8897f1a9545ba47f7ff0d8d5b">  973</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="class_authenticated_encryption_filter.html#a061422f8897f1a9545ba47f7ff0d8d5b">AuthenticatedEncryptionFilter::ChannelPut2</a>(<span class="keyword">const</span> std::string &amp;channel, <span class="keyword">const</span> byte *begin, <span class="keywordtype">size_t</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;{</div><div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;    <span class="keywordflow">if</span> (channel.empty())</div><div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="class_filter_with_buffered_input.html#a9885841f5ecee1403b57c5b1fc28a928">StreamTransformationFilter::Put2</a>(begin, length, messageEnd, blocking);</div><div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;</div><div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;    <span class="keywordflow">if</span> (channel == <a class="code" href="cryptlib_8h.html#aff60e2d96212d25c078c2dd11e45de0e">AAD_CHANNEL</a>)</div><div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;        <span class="keywordflow">return</span> m_hf.<a class="code" href="class_hash_filter.html#a7dde1304b794c488f43cb60f8bbf7b66">Put2</a>(begin, length, 0, blocking);</div><div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;</div><div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;    <span class="keywordflow">throw</span> <a class="code" href="struct_buffered_transformation_1_1_invalid_channel_name.html">InvalidChannelName</a>(<span class="stringliteral">&quot;AuthenticatedEncryptionFilter&quot;</span>, channel);</div><div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;}</div><div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;</div><div class="line"><a name="l00984"></a><span class="lineno"><a class="line" href="class_authenticated_encryption_filter.html#a372eb12964b7974cf58154589ede32ad">  984</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_authenticated_encryption_filter.html#a372eb12964b7974cf58154589ede32ad">AuthenticatedEncryptionFilter::LastPut</a>(<span class="keyword">const</span> byte *inString, <span class="keywordtype">size_t</span> length)</div><div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;{</div><div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;    StreamTransformationFilter::LastPut(inString, length);</div><div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;    m_hf.<a class="code" href="class_buffered_transformation.html#a20ae0ef2e4ff338b43849e541e9b940f">MessageEnd</a>();</div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;}</div><div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;</div><div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;<span class="comment">// *************************************************************</span></div><div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;</div><div class="line"><a name="l00992"></a><span class="lineno"><a class="line" href="class_authenticated_decryption_filter.html#a8749a671716e49da0ac686df2d38df1e">  992</a></span>&#160;<a class="code" href="class_authenticated_decryption_filter.html#a8749a671716e49da0ac686df2d38df1e">AuthenticatedDecryptionFilter::AuthenticatedDecryptionFilter</a>(<a class="code" href="class_authenticated_symmetric_cipher.html">AuthenticatedSymmetricCipher</a> &amp;c, <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment, word32 flags, <span class="keywordtype">int</span> truncatedDigestSize, <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979">BlockPaddingScheme</a> padding)</div><div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;    : <a class="code" href="class_filter_with_buffered_input.html">FilterWithBufferedInput</a>(attachment)</div><div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;    , m_hashVerifier(c, new <a class="code" href="class_output_proxy.html">OutputProxy</a>(*this, false))</div><div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;    , m_streamFilter(c, new <a class="code" href="class_output_proxy.html">OutputProxy</a>(*this, false), padding, true)</div><div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;{</div><div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;    <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(!c.IsForwardTransformation() || c.IsSelfInverting());</div><div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;    <a class="code" href="class_filter_with_buffered_input.html#ae97be71708e0020167e5c08856fd3f3b">IsolatedInitialize</a>(<a class="code" href="algparam_8h.html#aa13eee74de98cf8aaa7e83f4fae7f28b">MakeParameters</a>(<a class="code" href="namespace_name.html#a48820945ba488fac5d5507eea9a5114e">Name::BlockPaddingScheme</a>(), padding)(<a class="code" href="namespace_name.html#a2162958b4e568965aa905d6b1a34b058">Name::AuthenticatedDecryptionFilterFlags</a>(), flags)(<a class="code" href="namespace_name.html#a0200d7e5692b4343517eb57b1fb9e0f2">Name::TruncatedDigestSize</a>(), truncatedDigestSize));</div><div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;}</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;<span class="keywordtype">void</span> AuthenticatedDecryptionFilter::InitializeDerivedAndReturnNewSizes(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters, <span class="keywordtype">size_t</span> &amp;firstSize, <span class="keywordtype">size_t</span> &amp;blockSize, <span class="keywordtype">size_t</span> &amp;lastSize)</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;{</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;    word32 flags = parameters.<a class="code" href="class_name_value_pairs.html#a4daf1ef67b547c6be96188a43e5ec05e">GetValueWithDefault</a>(<a class="code" href="namespace_name.html#a2162958b4e568965aa905d6b1a34b058">Name::AuthenticatedDecryptionFilterFlags</a>(), (word32)<a class="code" href="class_authenticated_decryption_filter.html#a2181e843a0e19b1b256498d905e2c5dfa4e00a012cd175ded3a65f1664620adec">DEFAULT_FLAGS</a>);</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;    m_hashVerifier.<a class="code" href="class_filter.html#a0c011bdc71755b373292e7a722e9e332">Initialize</a>(<a class="code" href="class_combined_name_value_pairs.html">CombinedNameValuePairs</a>(parameters, <a class="code" href="algparam_8h.html#aa13eee74de98cf8aaa7e83f4fae7f28b">MakeParameters</a>(<a class="code" href="namespace_name.html#a64f4bf06f3cd4ae2b99697f5d39bf768">Name::HashVerificationFilterFlags</a>(), flags)));</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;    m_streamFilter.<a class="code" href="class_filter.html#a0c011bdc71755b373292e7a722e9e332">Initialize</a>(parameters);</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;    firstSize = m_hashVerifier.m_firstSize;</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;    blockSize = 1;</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;    lastSize = m_hashVerifier.m_lastSize;</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;}</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;</div><div class="line"><a name="l01013"></a><span class="lineno"><a class="line" href="class_authenticated_decryption_filter.html#af4e30b147daa507238e9bee3715a3a23"> 1013</a></span>&#160;byte * <a class="code" href="class_authenticated_decryption_filter.html#af4e30b147daa507238e9bee3715a3a23">AuthenticatedDecryptionFilter::ChannelCreatePutSpace</a>(<span class="keyword">const</span> std::string &amp;channel, <span class="keywordtype">size_t</span> &amp;size)</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;{</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;    <span class="keywordflow">if</span> (channel.empty())</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;        <span class="keywordflow">return</span> m_streamFilter.<a class="code" href="class_buffered_transformation.html#af390325c959c3d6a2c03a447d6cd469d">CreatePutSpace</a>(size);</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;    <span class="keywordflow">if</span> (channel == <a class="code" href="cryptlib_8h.html#aff60e2d96212d25c078c2dd11e45de0e">AAD_CHANNEL</a>)</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;        <span class="keywordflow">return</span> m_hashVerifier.<a class="code" href="class_buffered_transformation.html#af390325c959c3d6a2c03a447d6cd469d">CreatePutSpace</a>(size);</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;    <span class="keywordflow">throw</span> <a class="code" href="struct_buffered_transformation_1_1_invalid_channel_name.html">InvalidChannelName</a>(<span class="stringliteral">&quot;AuthenticatedDecryptionFilter&quot;</span>, channel);</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;}</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;</div><div class="line"><a name="l01024"></a><span class="lineno"><a class="line" href="class_authenticated_decryption_filter.html#af29b21590d82a985e63540276b0fde75"> 1024</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="class_authenticated_decryption_filter.html#af29b21590d82a985e63540276b0fde75">AuthenticatedDecryptionFilter::ChannelPut2</a>(<span class="keyword">const</span> std::string &amp;channel, <span class="keyword">const</span> byte *begin, <span class="keywordtype">size_t</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;{</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;    <span class="keywordflow">if</span> (channel.empty())</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;    {</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;        <span class="keywordflow">if</span> (m_lastSize &gt; 0)</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;            m_hashVerifier.<a class="code" href="class_filter_with_buffered_input.html#afa0096257c94f94c3a5938a0e826c46f">ForceNextPut</a>();</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="class_filter_with_buffered_input.html#a9885841f5ecee1403b57c5b1fc28a928">FilterWithBufferedInput::Put2</a>(begin, length, messageEnd, blocking);</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;    }</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;    <span class="keywordflow">if</span> (channel == <a class="code" href="cryptlib_8h.html#aff60e2d96212d25c078c2dd11e45de0e">AAD_CHANNEL</a>)</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;        <span class="keywordflow">return</span> m_hashVerifier.<a class="code" href="class_filter_with_buffered_input.html#a9885841f5ecee1403b57c5b1fc28a928">Put2</a>(begin, length, 0, blocking);</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;    <span class="keywordflow">throw</span> <a class="code" href="struct_buffered_transformation_1_1_invalid_channel_name.html">InvalidChannelName</a>(<span class="stringliteral">&quot;AuthenticatedDecryptionFilter&quot;</span>, channel);</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;}</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;<span class="keywordtype">void</span> AuthenticatedDecryptionFilter::FirstPut(<span class="keyword">const</span> byte *inString)</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;{</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;    m_hashVerifier.<a class="code" href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">Put</a>(inString, m_firstSize);</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;}</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;<span class="keywordtype">void</span> AuthenticatedDecryptionFilter::NextPutMultiple(<span class="keyword">const</span> byte *inString, <span class="keywordtype">size_t</span> length)</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;{</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;    m_streamFilter.<a class="code" href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">Put</a>(inString, length);</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;}</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;<span class="keywordtype">void</span> AuthenticatedDecryptionFilter::LastPut(<span class="keyword">const</span> byte *inString, <span class="keywordtype">size_t</span> length)</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;{</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;    m_streamFilter.<a class="code" href="class_buffered_transformation.html#a20ae0ef2e4ff338b43849e541e9b940f">MessageEnd</a>();</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;    m_hashVerifier.<a class="code" href="class_buffered_transformation.html#aa10b7e626f5af900a4d12f6e5d125891">PutMessageEnd</a>(inString, length);</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;}</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;<span class="comment">// *************************************************************</span></div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;</div><div class="line"><a name="l01057"></a><span class="lineno"><a class="line" href="class_signer_filter.html#adf4aaa798c16e2ee90bbd39b876df717"> 1057</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_signer_filter.html#adf4aaa798c16e2ee90bbd39b876df717">SignerFilter::IsolatedInitialize</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters)</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;{</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;    m_putMessage = parameters.<a class="code" href="class_name_value_pairs.html#a4daf1ef67b547c6be96188a43e5ec05e">GetValueWithDefault</a>(<a class="code" href="namespace_name.html#ac588f444a195914b81ba67aaf0019735">Name::PutMessage</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;    m_messageAccumulator.reset(m_signer.<a class="code" href="class_p_k___signer.html#aff85d006e814ccc8ac943b145a0bfaf9">NewSignatureAccumulator</a>(m_rng));</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;}</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;</div><div class="line"><a name="l01063"></a><span class="lineno"><a class="line" href="class_signer_filter.html#acfba1ed693cebff62db4d2bde7c011e5"> 1063</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="class_signer_filter.html#acfba1ed693cebff62db4d2bde7c011e5">SignerFilter::Put2</a>(<span class="keyword">const</span> byte *inString, <span class="keywordtype">size_t</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;{</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;    FILTER_BEGIN;</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;    m_messageAccumulator-&gt;<a class="code" href="class_hash_transformation.html#aafabefaf445b65d3ba0d8e1c0294afe5">Update</a>(inString, length);</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;    <span class="keywordflow">if</span> (m_putMessage)</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;        FILTER_OUTPUT(1, inString, length, 0);</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;    <span class="keywordflow">if</span> (messageEnd)</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;    {</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;        m_buf.<a class="code" href="class_sec_block.html#a90d46e577c951d81a2d25a4742a3e979">New</a>(m_signer.<a class="code" href="class_p_k___signature_scheme.html#aab30ad8e2da2d706cf6c69bdac963afc">SignatureLength</a>());</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;        m_signer.<a class="code" href="class_p_k___signer.html#ac8e0cecd225c0fdbb335713101e079cd">Sign</a>(m_rng, m_messageAccumulator.release(), m_buf);</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;        FILTER_OUTPUT(2, m_buf, m_buf.<a class="code" href="class_sec_block.html#af5999bffe3193e62719cc0792b0282a7">size</a>(), messageEnd);</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;        m_messageAccumulator.reset(m_signer.<a class="code" href="class_p_k___signer.html#aff85d006e814ccc8ac943b145a0bfaf9">NewSignatureAccumulator</a>(m_rng));</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;    }</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;    FILTER_END_NO_MESSAGE_END;</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;}</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;</div><div class="line"><a name="l01079"></a><span class="lineno"><a class="line" href="class_signature_verification_filter.html#a7c6d805105a4c57f0bcb8dc013a723e1"> 1079</a></span>&#160;<a class="code" href="class_signature_verification_filter.html#a7c6d805105a4c57f0bcb8dc013a723e1">SignatureVerificationFilter::SignatureVerificationFilter</a>(<span class="keyword">const</span> <a class="code" href="class_p_k___verifier.html">PK_Verifier</a> &amp;verifier, <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment, word32 flags)</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;    : <a class="code" href="class_filter_with_buffered_input.html">FilterWithBufferedInput</a>(attachment)</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;    , m_verifier(verifier), m_flags(0), m_verified(0)</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;{</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;    <a class="code" href="class_filter_with_buffered_input.html#ae97be71708e0020167e5c08856fd3f3b">IsolatedInitialize</a>(<a class="code" href="algparam_8h.html#aa13eee74de98cf8aaa7e83f4fae7f28b">MakeParameters</a>(<a class="code" href="namespace_name.html#acd3b453924b7d87eb7ada5f138e0760b">Name::SignatureVerificationFilterFlags</a>(), flags));</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;}</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;<span class="keywordtype">void</span> SignatureVerificationFilter::InitializeDerivedAndReturnNewSizes(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters, <span class="keywordtype">size_t</span> &amp;firstSize, <span class="keywordtype">size_t</span> &amp;blockSize, <span class="keywordtype">size_t</span> &amp;lastSize)</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;{</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;    m_flags = parameters.<a class="code" href="class_name_value_pairs.html#a4daf1ef67b547c6be96188a43e5ec05e">GetValueWithDefault</a>(<a class="code" href="namespace_name.html#acd3b453924b7d87eb7ada5f138e0760b">Name::SignatureVerificationFilterFlags</a>(), (word32)<a class="code" href="class_signature_verification_filter.html#a3673220151c47758b53dda37c8210180a41f7ffb499849a9d7ca6e0b82445e45f">DEFAULT_FLAGS</a>);</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;    m_messageAccumulator.reset(m_verifier.<a class="code" href="class_p_k___verifier.html#acd874268dab653dde01409fc9dfd2069">NewVerificationAccumulator</a>());</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;    <span class="keywordtype">size_t</span> size = m_verifier.<a class="code" href="class_p_k___signature_scheme.html#aab30ad8e2da2d706cf6c69bdac963afc">SignatureLength</a>();</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;    <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(size != 0); <span class="comment">// TODO: handle recoverable signature scheme</span></div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;    m_verified = <span class="keyword">false</span>;</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;    firstSize = m_flags &amp; <a class="code" href="class_signature_verification_filter.html#a3673220151c47758b53dda37c8210180a26bac40d24e37a841fcd91b072708baa">SIGNATURE_AT_BEGIN</a> ? size : 0;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;    blockSize = 1;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;    lastSize = m_flags &amp; <a class="code" href="class_signature_verification_filter.html#a3673220151c47758b53dda37c8210180a26bac40d24e37a841fcd91b072708baa">SIGNATURE_AT_BEGIN</a> ? 0 : size;</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;}</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;<span class="keywordtype">void</span> SignatureVerificationFilter::FirstPut(<span class="keyword">const</span> byte *inString)</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;{</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;    <span class="keywordflow">if</span> (m_flags &amp; <a class="code" href="class_signature_verification_filter.html#a3673220151c47758b53dda37c8210180a26bac40d24e37a841fcd91b072708baa">SIGNATURE_AT_BEGIN</a>)</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;    {</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;        <span class="keywordflow">if</span> (m_verifier.<a class="code" href="class_p_k___signature_scheme.html#a8f62890f0485b9ca58528047871f8894">SignatureUpfront</a>())</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;            m_verifier.<a class="code" href="class_p_k___verifier.html#a515aa448e7fc3a5c6e422e65500ab507">InputSignature</a>(*m_messageAccumulator, inString, m_verifier.<a class="code" href="class_p_k___signature_scheme.html#aab30ad8e2da2d706cf6c69bdac963afc">SignatureLength</a>());</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;        {</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;            m_signature.<a class="code" href="class_sec_block.html#a90d46e577c951d81a2d25a4742a3e979">New</a>(m_verifier.<a class="code" href="class_p_k___signature_scheme.html#aab30ad8e2da2d706cf6c69bdac963afc">SignatureLength</a>());</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;            <span class="keywordflow">if</span> (inString) {memcpy(m_signature, inString, m_signature.<a class="code" href="class_sec_block.html#af5999bffe3193e62719cc0792b0282a7">size</a>());}</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;        }</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;        <span class="keywordflow">if</span> (m_flags &amp; <a class="code" href="class_signature_verification_filter.html#a3673220151c47758b53dda37c8210180aebf3d10447e668123dac4143e170189d">PUT_SIGNATURE</a>)</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;            <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">Put</a>(inString, m_signature.<a class="code" href="class_sec_block.html#af5999bffe3193e62719cc0792b0282a7">size</a>());</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;    }</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;    {</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;        <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(!m_verifier.<a class="code" href="class_p_k___signature_scheme.html#a8f62890f0485b9ca58528047871f8894">SignatureUpfront</a>());</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;    }</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;}</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;<span class="keywordtype">void</span> SignatureVerificationFilter::NextPutMultiple(<span class="keyword">const</span> byte *inString, <span class="keywordtype">size_t</span> length)</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;{</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;    m_messageAccumulator-&gt;<a class="code" href="class_hash_transformation.html#aafabefaf445b65d3ba0d8e1c0294afe5">Update</a>(inString, length);</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;    <span class="keywordflow">if</span> (m_flags &amp; <a class="code" href="class_signature_verification_filter.html#a3673220151c47758b53dda37c8210180a684aaa0090797d86a6929bb9922b6dd6">PUT_MESSAGE</a>)</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;        <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">Put</a>(inString, length);</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;}</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;<span class="keywordtype">void</span> SignatureVerificationFilter::LastPut(<span class="keyword">const</span> byte *inString, <span class="keywordtype">size_t</span> length)</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;{</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;    <span class="keywordflow">if</span> (m_flags &amp; <a class="code" href="class_signature_verification_filter.html#a3673220151c47758b53dda37c8210180a26bac40d24e37a841fcd91b072708baa">SIGNATURE_AT_BEGIN</a>)</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;    {</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;        <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(length == 0);</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;        m_verifier.<a class="code" href="class_p_k___verifier.html#a515aa448e7fc3a5c6e422e65500ab507">InputSignature</a>(*m_messageAccumulator, m_signature, m_signature.<a class="code" href="class_sec_block.html#af5999bffe3193e62719cc0792b0282a7">size</a>());</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;        m_verified = m_verifier.<a class="code" href="class_p_k___verifier.html#a36e176dc8a0d3f924938cb2b07021f28">VerifyAndRestart</a>(*m_messageAccumulator);</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;    }</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;    {</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;        m_verifier.<a class="code" href="class_p_k___verifier.html#a515aa448e7fc3a5c6e422e65500ab507">InputSignature</a>(*m_messageAccumulator, inString, length);</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;        m_verified = m_verifier.<a class="code" href="class_p_k___verifier.html#a36e176dc8a0d3f924938cb2b07021f28">VerifyAndRestart</a>(*m_messageAccumulator);</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;        <span class="keywordflow">if</span> (m_flags &amp; <a class="code" href="class_signature_verification_filter.html#a3673220151c47758b53dda37c8210180aebf3d10447e668123dac4143e170189d">PUT_SIGNATURE</a>)</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;            <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">Put</a>(inString, length);</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;    }</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;    <span class="keywordflow">if</span> (m_flags &amp; <a class="code" href="class_signature_verification_filter.html#a3673220151c47758b53dda37c8210180a8b7c4e61666442d3db88e86fd985a2a5">PUT_RESULT</a>)</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;        <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-&gt;<a class="code" href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">Put</a>(m_verified);</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;    <span class="keywordflow">if</span> ((m_flags &amp; <a class="code" href="class_signature_verification_filter.html#a3673220151c47758b53dda37c8210180a2b9d85ccbc2be3ca34f45bf78b948c23">THROW_EXCEPTION</a>) &amp;&amp; !m_verified)</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;        <span class="keywordflow">throw</span> SignatureVerificationFailed();</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;}</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;<span class="comment">// *************************************************************</span></div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;</div><div class="line"><a name="l01151"></a><span class="lineno"><a class="line" href="class_source.html#a0c40e3e80ff36a6d3ec94e72e00fe6c3"> 1151</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="class_source.html#a0c40e3e80ff36a6d3ec94e72e00fe6c3">Source::PumpAll2</a>(<span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;{</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> messageCount = UINT_MAX;</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;    <span class="keywordflow">do</span> {</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;        RETURN_IF_NONZERO(<a class="code" href="class_source.html#a7bc3bec2dc43d81953782f8f1c09aa25">PumpMessages2</a>(messageCount, blocking));</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;    } <span class="keywordflow">while</span>(messageCount == UINT_MAX);</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;}</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;</div><div class="line"><a name="l01161"></a><span class="lineno"><a class="line" href="class_store.html#a5f578b4a2da5371a8a4b80a038a2d5ea"> 1161</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="class_store.html#a5f578b4a2da5371a8a4b80a038a2d5ea">Store::GetNextMessage</a>()</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;{</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;    <span class="keywordflow">if</span> (!m_messageEnd &amp;&amp; !<a class="code" href="class_buffered_transformation.html#a8c1e2ca57fc06a1f3694d8fe7f8508ff">AnyRetrievable</a>())</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;    {</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;        m_messageEnd=<span class="keyword">true</span>;</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;    }</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;}</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Store::CopyMessagesTo(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;target, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count, <span class="keyword">const</span> std::string &amp;channel)<span class="keyword"> const</span></div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;    <span class="keywordflow">if</span> (m_messageEnd || count == 0)</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;        <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;    {</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;        <a class="code" href="class_buffered_transformation.html#a7693f056b01bc4feadd8a794fba2d30a">CopyTo</a>(target, ULONG_MAX, channel);</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;        <span class="keywordflow">if</span> (GetAutoSignalPropagation())</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;            target.<a class="code" href="class_buffered_transformation.html#ae0b37b299c5835083e58b205f9cc25cc">ChannelMessageEnd</a>(channel, GetAutoSignalPropagation()-1);</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;        <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;    }</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;}</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;<span class="keywordtype">void</span> StringStore::StoreInitialize(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters)</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;{</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;    <a class="code" href="class_const_byte_array_parameter.html">ConstByteArrayParameter</a> array;</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;    <span class="keywordflow">if</span> (!parameters.<a class="code" href="class_name_value_pairs.html#a5357c3a09602e44671d1e42cb9a9408d">GetValue</a>(<a class="code" href="namespace_name.html#ac664b5e9ab556ada75739f0532759c12">Name::InputBuffer</a>(), array))</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">&quot;StringStore: missing InputBuffer argument&quot;</span>);</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;    m_store = array.<a class="code" href="class_const_byte_array_parameter.html#ab89acc8dae383f2663dd3864651e8ef1">begin</a>();</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;    m_length = array.<a class="code" href="class_const_byte_array_parameter.html#ab83dbf7e4d80c0304917a3cc1d3cf144">size</a>();</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;    m_count = 0;</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;}</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;</div><div class="line"><a name="l01195"></a><span class="lineno"><a class="line" href="class_string_store.html#acca5c45df0db23ac71fb363d7005743b"> 1195</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="class_string_store.html#acca5c45df0db23ac71fb363d7005743b">StringStore::TransferTo2</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;target, lword &amp;transferBytes, <span class="keyword">const</span> std::string &amp;channel, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;{</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;    lword position = 0;</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;    <span class="keywordtype">size_t</span> blockedBytes = <a class="code" href="class_string_store.html#a1272eeca9a2496019bb524faa23ac557">CopyRangeTo2</a>(target, position, transferBytes, channel, blocking);</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;    m_count += (size_t)position;</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;    transferBytes = position;</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;    <span class="keywordflow">return</span> blockedBytes;</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;}</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;</div><div class="line"><a name="l01204"></a><span class="lineno"><a class="line" href="class_string_store.html#a1272eeca9a2496019bb524faa23ac557"> 1204</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="class_string_store.html#a1272eeca9a2496019bb524faa23ac557">StringStore::CopyRangeTo2</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;target, lword &amp;begin, lword end, <span class="keyword">const</span> std::string &amp;channel, <span class="keywordtype">bool</span> blocking)<span class="keyword"> const</span></div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;    <span class="keywordtype">size_t</span> i = <a class="code" href="misc_8h.html#ac8391e7d9d613a6c401787d2cdab1f51">UnsignedMin</a>(m_length, m_count+begin);</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;    <span class="keywordtype">size_t</span> len = <a class="code" href="misc_8h.html#ac8391e7d9d613a6c401787d2cdab1f51">UnsignedMin</a>(m_length-i, end-begin);</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;    <span class="keywordtype">size_t</span> blockedBytes = target.<a class="code" href="class_buffered_transformation.html#ae6b026f47d8a0ea2e35a6cb8d9ec2c97">ChannelPut2</a>(channel, m_store+i, len, 0, blocking);</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;    <span class="keywordflow">if</span> (!blockedBytes)</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;        begin += len;</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;    <span class="keywordflow">return</span> blockedBytes;</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;}</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;<span class="keywordtype">void</span> RandomNumberStore::StoreInitialize(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters)</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;{</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;    parameters.<a class="code" href="class_name_value_pairs.html#af28f6e7abf98606d8146bfda271e99db">GetRequiredParameter</a>(<span class="stringliteral">&quot;RandomNumberStore&quot;</span>, <span class="stringliteral">&quot;RandomNumberGeneratorPointer&quot;</span>, m_rng);</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;    <span class="keywordtype">int</span> length;</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;    parameters.<a class="code" href="class_name_value_pairs.html#acfb673d912e1bc19386bebba9d58c23f">GetRequiredIntParameter</a>(<span class="stringliteral">&quot;RandomNumberStore&quot;</span>, <span class="stringliteral">&quot;RandomNumberStoreSize&quot;</span>, length);</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;    m_length = length;</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;}</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;</div><div class="line"><a name="l01222"></a><span class="lineno"><a class="line" href="class_random_number_store.html#aa7c2e0b12f4c8909f9424bbc77eb85dd"> 1222</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="class_random_number_store.html#aa7c2e0b12f4c8909f9424bbc77eb85dd">RandomNumberStore::TransferTo2</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;target, lword &amp;transferBytes, <span class="keyword">const</span> std::string &amp;channel, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;{</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;    <span class="keywordflow">if</span> (!blocking)</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="class_not_implemented.html">NotImplemented</a>(<span class="stringliteral">&quot;RandomNumberStore: nonblocking transfer is not implemented by this object&quot;</span>);</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;    transferBytes = <a class="code" href="misc_8h.html#ac8391e7d9d613a6c401787d2cdab1f51">UnsignedMin</a>(transferBytes, m_length - m_count);</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;    m_rng-&gt;<a class="code" href="class_random_number_generator.html#a5cc474006e2c7383ec20cc4d0c2abbaf">GenerateIntoBufferedTransformation</a>(target, channel, transferBytes);</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;    m_count += transferBytes;</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;}</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;</div><div class="line"><a name="l01234"></a><span class="lineno"><a class="line" href="class_null_store.html#a392d1f43c190dd48e145ddbc3c7ffba3"> 1234</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="class_null_store.html#a392d1f43c190dd48e145ddbc3c7ffba3">NullStore::CopyRangeTo2</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;target, lword &amp;begin, lword end, <span class="keyword">const</span> std::string &amp;channel, <span class="keywordtype">bool</span> blocking)<span class="keyword"> const</span></div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> byte nullBytes[128] = {0};</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;    <span class="keywordflow">while</span> (begin &lt; end)</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;    {</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;        <span class="keywordtype">size_t</span> len = (size_t)<a class="code" href="misc_8h.html#abe412b0409249cb54899e97bc7d86424">STDMIN</a>(end-begin, lword(128));</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;        <span class="keywordtype">size_t</span> blockedBytes = target.<a class="code" href="class_buffered_transformation.html#ae6b026f47d8a0ea2e35a6cb8d9ec2c97">ChannelPut2</a>(channel, nullBytes, len, 0, blocking);</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;        <span class="keywordflow">if</span> (blockedBytes)</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;            <span class="keywordflow">return</span> blockedBytes;</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;        begin += len;</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;    }</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;}</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;</div><div class="line"><a name="l01248"></a><span class="lineno"><a class="line" href="class_null_store.html#ac56b49281ee6f702ed4d23692e6d5528"> 1248</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="class_null_store.html#ac56b49281ee6f702ed4d23692e6d5528">NullStore::TransferTo2</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;target, lword &amp;transferBytes, <span class="keyword">const</span> std::string &amp;channel, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;{</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;    lword begin = 0;</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;    <span class="keywordtype">size_t</span> blockedBytes = <a class="code" href="class_null_store.html#a392d1f43c190dd48e145ddbc3c7ffba3">NullStore::CopyRangeTo2</a>(target, begin, transferBytes, channel, blocking);</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;    transferBytes = begin;</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;    m_size -= begin;</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;    <span class="keywordflow">return</span> blockedBytes;</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;}</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;NAMESPACE_END</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;<span class="preprocessor">#endif</span></div><div class="ttc" id="class_const_byte_array_parameter_html"><div class="ttname"><a href="class_const_byte_array_parameter.html">ConstByteArrayParameter</a></div><div class="ttdoc">Used to pass byte array input as part of a NameValuePairs object. </div><div class="ttdef"><b>Definition:</b> <a href="algparam_8h_source.html#l00020">algparam.h:20</a></div></div>
<div class="ttc" id="class_meter_filter_html_a7d59d4e7f674b5ba6a54e8e241cf9148"><div class="ttname"><a href="class_meter_filter.html#a7d59d4e7f674b5ba6a54e8e241cf9148">MeterFilter::Put2</a></div><div class="ttdeci">size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking)</div><div class="ttdoc">Input multiple bytes for processing. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00232">filters.cpp:232</a></div></div>
<div class="ttc" id="class_name_value_pairs_html_a7ddb654b7afcd1a04422a7b4b01366d9"><div class="ttname"><a href="class_name_value_pairs.html#a7ddb654b7afcd1a04422a7b4b01366d9">NameValuePairs::GetIntValueWithDefault</a></div><div class="ttdeci">int GetIntValueWithDefault(const char *name, int defaultValue) const</div><div class="ttdoc">Get a named value with type int, with default. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l00392">cryptlib.h:392</a></div></div>
<div class="ttc" id="argnames_8h_html"><div class="ttname"><a href="argnames_8h.html">argnames.h</a></div><div class="ttdoc">Standard names for retrieving values by name when working with NameValuePairs. </div></div>
<div class="ttc" id="misc_8h_html_ab29e4cf4553b1ff9f884df223a2abd6a"><div class="ttname"><a href="misc_8h.html#ab29e4cf4553b1ff9f884df223a2abd6a">FindIfNot</a></div><div class="ttdeci">InputIt FindIfNot(InputIt first, InputIt last, const T &amp;value)</div><div class="ttdoc">Finds first element not in a range. </div><div class="ttdef"><b>Definition:</b> <a href="misc_8h_source.html#l02540">misc.h:2540</a></div></div>
<div class="ttc" id="class_invalid_argument_html"><div class="ttname"><a href="class_invalid_argument.html">InvalidArgument</a></div><div class="ttdoc">An invalid argument was detected. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l00199">cryptlib.h:199</a></div></div>
<div class="ttc" id="class_buffered_transformation_html_add2a8b1b88a881edf8bebe089438fc66"><div class="ttname"><a href="class_buffered_transformation.html#add2a8b1b88a881edf8bebe089438fc66">BufferedTransformation::ChannelPutModifiable2</a></div><div class="ttdeci">virtual size_t ChannelPutModifiable2(const std::string &amp;channel, byte *inString, size_t length, int messageEnd, bool blocking)</div><div class="ttdoc">Input multiple bytes that may be modified by callee on a channel. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8cpp_source.html#l00480">cryptlib.cpp:480</a></div></div>
<div class="ttc" id="class_hash_verification_filter_html_a4e171785f3f9b00d0a10f4c2afa1cc70a3974fb63ec975408ce7ab672d99ee004"><div class="ttname"><a href="class_hash_verification_filter.html#a4e171785f3f9b00d0a10f4c2afa1cc70a3974fb63ec975408ce7ab672d99ee004">HashVerificationFilter::HASH_AT_BEGIN</a></div><div class="ttdoc">Indicates the hash is at the beginning of the message (i.e., concatenation of hash+message) ...</div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00599">filters.h:599</a></div></div>
<div class="ttc" id="class_hash_filter_html_a58b9949a468e798cc97d7b4c59a9d8c2"><div class="ttname"><a href="class_hash_filter.html#a58b9949a468e798cc97d7b4c59a9d8c2">HashFilter::HashFilter</a></div><div class="ttdeci">HashFilter(HashTransformation &amp;hm, BufferedTransformation *attachment=NULL, bool putMessage=false, int truncatedDigestSize=-1, const std::string &amp;messagePutChannel=DEFAULT_CHANNEL, const std::string &amp;hashPutChannel=DEFAULT_CHANNEL)</div><div class="ttdoc">Construct a HashFilter. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00853">filters.cpp:853</a></div></div>
<div class="ttc" id="class_random_number_sink_html_ad9eb1681d33e03ebf6ef43dc70299c9e"><div class="ttname"><a href="class_random_number_sink.html#ad9eb1681d33e03ebf6ef43dc70299c9e">RandomNumberSink::IsolatedInitialize</a></div><div class="ttdeci">void IsolatedInitialize(const NameValuePairs &amp;parameters)</div><div class="ttdoc">Initialize or reinitialize this object, without signal propagation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00522">filters.cpp:522</a></div></div>
<div class="ttc" id="class_meter_filter_html_a58898a4bba38196c8432b8b5d324b671"><div class="ttname"><a href="class_meter_filter.html#a58898a4bba38196c8432b8b5d324b671">MeterFilter::AddRangeToSkip</a></div><div class="ttdeci">void AddRangeToSkip(unsigned int message, lword position, lword size, bool sortNow=true)</div><div class="ttdoc">Adds a range to skip during processing. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00166">filters.cpp:166</a></div></div>
<div class="ttc" id="class_hash_filter_html_a7dde1304b794c488f43cb60f8bbf7b66"><div class="ttname"><a href="class_hash_filter.html#a7dde1304b794c488f43cb60f8bbf7b66">HashFilter::Put2</a></div><div class="ttdeci">size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking)</div><div class="ttdoc">Input multiple bytes for processing. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00868">filters.cpp:868</a></div></div>
<div class="ttc" id="class_stream_transformation_filter_html_a44233434772a4b8eed494dc2dee67ae5"><div class="ttname"><a href="class_stream_transformation_filter.html#a44233434772a4b8eed494dc2dee67ae5">StreamTransformationFilter::StreamTransformationFilter</a></div><div class="ttdeci">StreamTransformationFilter(StreamTransformation &amp;c, BufferedTransformation *attachment=NULL, BlockPaddingScheme padding=DEFAULT_PADDING)</div><div class="ttdoc">Construct a StreamTransformationFilter. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00582">filters.cpp:582</a></div></div>
<div class="ttc" id="class_stream_transformation_html_a26feabde21bc4d1783195969733e3bb0"><div class="ttname"><a href="class_stream_transformation.html#a26feabde21bc4d1783195969733e3bb0">StreamTransformation::ProcessData</a></div><div class="ttdeci">virtual void ProcessData(byte *outString, const byte *inString, size_t length)=0</div><div class="ttdoc">Encrypt or decrypt an array of bytes. </div></div>
<div class="ttc" id="misc_8h_html"><div class="ttname"><a href="misc_8h.html">misc.h</a></div><div class="ttdoc">Utility functions for the Crypto++ library. </div></div>
<div class="ttc" id="class_authenticated_decryption_filter_html_af29b21590d82a985e63540276b0fde75"><div class="ttname"><a href="class_authenticated_decryption_filter.html#af29b21590d82a985e63540276b0fde75">AuthenticatedDecryptionFilter::ChannelPut2</a></div><div class="ttdeci">size_t ChannelPut2(const std::string &amp;channel, const byte *begin, size_t length, int messageEnd, bool blocking)</div><div class="ttdoc">Input multiple bytes for processing on a channel. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l01024">filters.cpp:1024</a></div></div>
<div class="ttc" id="class_source_html_a0c40e3e80ff36a6d3ec94e72e00fe6c3"><div class="ttname"><a href="class_source.html#a0c40e3e80ff36a6d3ec94e72e00fe6c3">Source::PumpAll2</a></div><div class="ttdeci">virtual size_t PumpAll2(bool blocking=true)</div><div class="ttdoc">Pump all data to attached transformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l01151">filters.cpp:1151</a></div></div>
<div class="ttc" id="struct_block_padding_scheme_def_html_abea06c498771e8f0ad0fbbc19416a979"><div class="ttname"><a href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979">BlockPaddingSchemeDef::BlockPaddingScheme</a></div><div class="ttdeci">BlockPaddingScheme</div><div class="ttdoc">Padding schemes used for block ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00470">filters.h:470</a></div></div>
<div class="ttc" id="class_authenticated_symmetric_cipher_html"><div class="ttname"><a href="class_authenticated_symmetric_cipher.html">AuthenticatedSymmetricCipher</a></div><div class="ttdoc">Interface for authenticated encryption modes of operation. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l01267">cryptlib.h:1267</a></div></div>
<div class="ttc" id="class_name_value_pairs_html_a4daf1ef67b547c6be96188a43e5ec05e"><div class="ttname"><a href="class_name_value_pairs.html#a4daf1ef67b547c6be96188a43e5ec05e">NameValuePairs::GetValueWithDefault</a></div><div class="ttdeci">T GetValueWithDefault(const char *name, T defaultValue) const</div><div class="ttdoc">Get a named value. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l00360">cryptlib.h:360</a></div></div>
<div class="ttc" id="class_byte_array_parameter_html_a4150de4d52b4921633947f06ed7d905d"><div class="ttname"><a href="class_byte_array_parameter.html#a4150de4d52b4921633947f06ed7d905d">ByteArrayParameter::size</a></div><div class="ttdeci">size_t size() const</div><div class="ttdoc">Length of the memory block. </div><div class="ttdef"><b>Definition:</b> <a href="algparam_8h_source.html#l00113">algparam.h:113</a></div></div>
<div class="ttc" id="class_hash_verification_filter_html_a4e171785f3f9b00d0a10f4c2afa1cc70a56c0daa4f424032c82a53d8dcdf78c55"><div class="ttname"><a href="class_hash_verification_filter.html#a4e171785f3f9b00d0a10f4c2afa1cc70a56c0daa4f424032c82a53d8dcdf78c55">HashVerificationFilter::THROW_EXCEPTION</a></div><div class="ttdoc">Indicates the filter should throw a HashVerificationFailed if a failure is encountered. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00607">filters.h:607</a></div></div>
<div class="ttc" id="class_const_byte_array_parameter_html_ab83dbf7e4d80c0304917a3cc1d3cf144"><div class="ttname"><a href="class_const_byte_array_parameter.html#ab83dbf7e4d80c0304917a3cc1d3cf144">ConstByteArrayParameter::size</a></div><div class="ttdeci">size_t size() const</div><div class="ttdoc">Length of the memory block. </div><div class="ttdef"><b>Definition:</b> <a href="algparam_8h_source.html#l00084">algparam.h:84</a></div></div>
<div class="ttc" id="class_message_queue_html"><div class="ttname"><a href="class_message_queue.html">MessageQueue</a></div><div class="ttdoc">Message Queue. </div><div class="ttdef"><b>Definition:</b> <a href="mqueue_8h_source.html#l00014">mqueue.h:14</a></div></div>
<div class="ttc" id="class_hash_verification_filter_html_a4e171785f3f9b00d0a10f4c2afa1cc70ac27995bd5aca3bef2fc7863c1a5bbe0b"><div class="ttname"><a href="class_hash_verification_filter.html#a4e171785f3f9b00d0a10f4c2afa1cc70ac27995bd5aca3bef2fc7863c1a5bbe0b">HashVerificationFilter::PUT_RESULT</a></div><div class="ttdoc">Indicates the result of the verification should be passed to an attached transformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00605">filters.h:605</a></div></div>
<div class="ttc" id="namespace_name_html_a64f4bf06f3cd4ae2b99697f5d39bf768"><div class="ttname"><a href="namespace_name.html#a64f4bf06f3cd4ae2b99697f5d39bf768">Name::HashVerificationFilterFlags</a></div><div class="ttdeci">const char * HashVerificationFilterFlags()</div><div class="ttdoc">word32 </div><div class="ttdef"><b>Definition:</b> <a href="argnames_8h_source.html#l00053">argnames.h:53</a></div></div>
<div class="ttc" id="class_hash_transformation_html_a590ecda344aa0fb045abf42ec08823b2"><div class="ttname"><a href="class_hash_transformation.html#a590ecda344aa0fb045abf42ec08823b2">HashTransformation::TruncatedFinal</a></div><div class="ttdeci">virtual void TruncatedFinal(byte *digest, size_t digestSize)=0</div><div class="ttdoc">Computes the hash of the current message. </div></div>
<div class="ttc" id="class_buffered_transformation_html_a7bb05ac3b6302e2ab994586d526fa804"><div class="ttname"><a href="class_buffered_transformation.html#a7bb05ac3b6302e2ab994586d526fa804">BufferedTransformation::IsolatedInitialize</a></div><div class="ttdeci">virtual void IsolatedInitialize(const NameValuePairs &amp;parameters)</div><div class="ttdoc">Initialize or reinitialize this object, without signal propagation. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l01702">cryptlib.h:1702</a></div></div>
<div class="ttc" id="class_filter_with_buffered_input_html_ae97be71708e0020167e5c08856fd3f3b"><div class="ttname"><a href="class_filter_with_buffered_input.html#ae97be71708e0020167e5c08856fd3f3b">FilterWithBufferedInput::IsolatedInitialize</a></div><div class="ttdeci">void IsolatedInitialize(const NameValuePairs &amp;parameters)</div><div class="ttdoc">Initialize or reinitialize this object, without signal propagation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00329">filters.cpp:329</a></div></div>
<div class="ttc" id="class_stream_transformation_html_af48589443f77f4ed9ff185f9c1a26cbf"><div class="ttname"><a href="class_stream_transformation.html#af48589443f77f4ed9ff185f9c1a26cbf">StreamTransformation::ProcessLastBlock</a></div><div class="ttdeci">virtual size_t ProcessLastBlock(byte *outString, size_t outLength, const byte *inString, size_t inLength)</div><div class="ttdoc">Encrypt or decrypt the last block of data. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8cpp_source.html#l00223">cryptlib.cpp:223</a></div></div>
<div class="ttc" id="class_output_proxy_html"><div class="ttname"><a href="class_output_proxy.html">OutputProxy</a></div><div class="ttdoc">Filter class that is a proxy for a sink. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00928">filters.h:928</a></div></div>
<div class="ttc" id="namespace_name_html_a2162958b4e568965aa905d6b1a34b058"><div class="ttname"><a href="namespace_name.html#a2162958b4e568965aa905d6b1a34b058">Name::AuthenticatedDecryptionFilterFlags</a></div><div class="ttdeci">const char * AuthenticatedDecryptionFilterFlags()</div><div class="ttdoc">word32 </div><div class="ttdef"><b>Definition:</b> <a href="argnames_8h_source.html#l00054">argnames.h:54</a></div></div>
<div class="ttc" id="namespace_name_html_acd3b453924b7d87eb7ada5f138e0760b"><div class="ttname"><a href="namespace_name.html#acd3b453924b7d87eb7ada5f138e0760b">Name::SignatureVerificationFilterFlags</a></div><div class="ttdeci">const char * SignatureVerificationFilterFlags()</div><div class="ttdoc">word32 </div><div class="ttdef"><b>Definition:</b> <a href="argnames_8h_source.html#l00055">argnames.h:55</a></div></div>
<div class="ttc" id="namespace_name_html_a48820945ba488fac5d5507eea9a5114e"><div class="ttname"><a href="namespace_name.html#a48820945ba488fac5d5507eea9a5114e">Name::BlockPaddingScheme</a></div><div class="ttdeci">const char * BlockPaddingScheme()</div><div class="ttdoc">StreamTransformationFilter::BlockPaddingScheme. </div><div class="ttdef"><b>Definition:</b> <a href="argnames_8h_source.html#l00052">argnames.h:52</a></div></div>
<div class="ttc" id="struct_block_padding_scheme_def_html_abea06c498771e8f0ad0fbbc19416a979a0ae39772a46aee3e0dbf3e91afff751c"><div class="ttname"><a href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979a0ae39772a46aee3e0dbf3e91afff751c">BlockPaddingSchemeDef::DEFAULT_PADDING</a></div><div class="ttdoc">Default padding scheme. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00490">filters.h:490</a></div></div>
<div class="ttc" id="class_filter_html_aa42c62587dda61266ac8195d9c9edb47"><div class="ttname"><a href="class_filter.html#aa42c62587dda61266ac8195d9c9edb47">Filter::MessageSeriesEnd</a></div><div class="ttdeci">bool MessageSeriesEnd(int propagation=-1, bool blocking=true)</div><div class="ttdoc">Marks the end of a series of messages, with signal propagation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00095">filters.cpp:95</a></div></div>
<div class="ttc" id="class_authenticated_decryption_filter_html_a8749a671716e49da0ac686df2d38df1e"><div class="ttname"><a href="class_authenticated_decryption_filter.html#a8749a671716e49da0ac686df2d38df1e">AuthenticatedDecryptionFilter::AuthenticatedDecryptionFilter</a></div><div class="ttdeci">AuthenticatedDecryptionFilter(AuthenticatedSymmetricCipher &amp;c, BufferedTransformation *attachment=NULL, word32 flags=DEFAULT_FLAGS, int truncatedDigestSize=-1, BlockPaddingScheme padding=DEFAULT_PADDING)</div><div class="ttdoc">Construct a AuthenticatedDecryptionFilter. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00992">filters.cpp:992</a></div></div>
<div class="ttc" id="class_meter_filter_html_a59c4b05b453ad56ed42b6951ab986db0"><div class="ttname"><a href="class_meter_filter.html#a59c4b05b453ad56ed42b6951ab986db0">MeterFilter::ResetMeter</a></div><div class="ttdeci">void ResetMeter()</div><div class="ttdoc">Resets the meter. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00160">filters.cpp:160</a></div></div>
<div class="ttc" id="class_signature_verification_filter_html_a3673220151c47758b53dda37c8210180a2b9d85ccbc2be3ca34f45bf78b948c23"><div class="ttname"><a href="class_signature_verification_filter.html#a3673220151c47758b53dda37c8210180a2b9d85ccbc2be3ca34f45bf78b948c23">SignatureVerificationFilter::THROW_EXCEPTION</a></div><div class="ttdoc">Indicates the filter should throw a HashVerificationFailed if a failure is encountered. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00798">filters.h:798</a></div></div>
<div class="ttc" id="smartptr_8h_html"><div class="ttname"><a href="smartptr_8h.html">smartptr.h</a></div><div class="ttdoc">Classes for automatic resource management. </div></div>
<div class="ttc" id="class_buffered_transformation_html_a27ac15af3ef43c5ad1e9db5812025fcd"><div class="ttname"><a href="class_buffered_transformation.html#a27ac15af3ef43c5ad1e9db5812025fcd">BufferedTransformation::TransferTo2</a></div><div class="ttdeci">virtual size_t TransferTo2(BufferedTransformation &amp;target, lword &amp;byteCount, const std::string &amp;channel=DEFAULT_CHANNEL, bool blocking=true)=0</div><div class="ttdoc">Transfer bytes from this object to another BufferedTransformation. </div></div>
<div class="ttc" id="class_signature_verification_filter_html_a3673220151c47758b53dda37c8210180a684aaa0090797d86a6929bb9922b6dd6"><div class="ttname"><a href="class_signature_verification_filter.html#a3673220151c47758b53dda37c8210180a684aaa0090797d86a6929bb9922b6dd6">SignatureVerificationFilter::PUT_MESSAGE</a></div><div class="ttdoc">Indicates the message should be passed to an attached transformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00792">filters.h:792</a></div></div>
<div class="ttc" id="config_8h_html"><div class="ttname"><a href="config_8h.html">config.h</a></div><div class="ttdoc">Library configuration file. </div></div>
<div class="ttc" id="class_authenticated_encryption_filter_html_a7e50639e227b5a0f6f184a69e6d48642"><div class="ttname"><a href="class_authenticated_encryption_filter.html#a7e50639e227b5a0f6f184a69e6d48642">AuthenticatedEncryptionFilter::ChannelCreatePutSpace</a></div><div class="ttdeci">byte * ChannelCreatePutSpace(const std::string &amp;channel, size_t &amp;size)</div><div class="ttdoc">Request space which can be written into by the caller. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00962">filters.cpp:962</a></div></div>
<div class="ttc" id="class_null_store_html_a392d1f43c190dd48e145ddbc3c7ffba3"><div class="ttname"><a href="class_null_store.html#a392d1f43c190dd48e145ddbc3c7ffba3">NullStore::CopyRangeTo2</a></div><div class="ttdeci">size_t CopyRangeTo2(BufferedTransformation &amp;target, lword &amp;begin, lword end=LWORD_MAX, const std::string &amp;channel=DEFAULT_CHANNEL, bool blocking=true) const</div><div class="ttdoc">Copy bytes from this object to another BufferedTransformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l01234">filters.cpp:1234</a></div></div>
<div class="ttc" id="stdcpp_8h_html"><div class="ttname"><a href="stdcpp_8h.html">stdcpp.h</a></div><div class="ttdoc">Common C++ header files. </div></div>
<div class="ttc" id="class_stream_transformation_html_ac00f3fcc21f33f11c8efa4de67ff7774"><div class="ttname"><a href="class_stream_transformation.html#ac00f3fcc21f33f11c8efa4de67ff7774">StreamTransformation::ProcessString</a></div><div class="ttdeci">void ProcessString(byte *inoutString, size_t length)</div><div class="ttdoc">Encrypt or decrypt a string of bytes. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l01013">cryptlib.h:1013</a></div></div>
<div class="ttc" id="class_store_html_a5f578b4a2da5371a8a4b80a038a2d5ea"><div class="ttname"><a href="class_store.html#a5f578b4a2da5371a8a4b80a038a2d5ea">Store::GetNextMessage</a></div><div class="ttdeci">bool GetNextMessage()</div><div class="ttdoc">Start retrieving the next message. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l01161">filters.cpp:1161</a></div></div>
<div class="ttc" id="class_sec_block_html_a90d46e577c951d81a2d25a4742a3e979"><div class="ttname"><a href="class_sec_block.html#a90d46e577c951d81a2d25a4742a3e979">SecBlock::New</a></div><div class="ttdeci">void New(size_type newSize)</div><div class="ttdoc">Change size without preserving contents. </div><div class="ttdef"><b>Definition:</b> <a href="secblock_8h_source.html#l00729">secblock.h:729</a></div></div>
<div class="ttc" id="class_combined_name_value_pairs_html"><div class="ttname"><a href="class_combined_name_value_pairs.html">CombinedNameValuePairs</a></div><div class="ttdoc">Combines two sets of NameValuePairs. </div><div class="ttdef"><b>Definition:</b> <a href="algparam_8h_source.html#l00124">algparam.h:124</a></div></div>
<div class="ttc" id="class_p_k___verifier_html_a36e176dc8a0d3f924938cb2b07021f28"><div class="ttname"><a href="class_p_k___verifier.html#a36e176dc8a0d3f924938cb2b07021f28">PK_Verifier::VerifyAndRestart</a></div><div class="ttdeci">virtual bool VerifyAndRestart(PK_MessageAccumulator &amp;messageAccumulator) const =0</div><div class="ttdoc">Check whether messageAccumulator contains a valid signature and message, and restart messageAccumulat...</div></div>
<div class="ttc" id="class_buffered_transformation_html_a6b504b2694ecb5d709a9858c5b93a0f7"><div class="ttname"><a href="class_buffered_transformation.html#a6b504b2694ecb5d709a9858c5b93a0f7">BufferedTransformation::ChannelFlush</a></div><div class="ttdeci">virtual bool ChannelFlush(const std::string &amp;channel, bool hardFlush, int propagation=-1, bool blocking=true)</div><div class="ttdoc">Flush buffered input and/or output on a channel. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8cpp_source.html#l00490">cryptlib.cpp:490</a></div></div>
<div class="ttc" id="class_hash_transformation_html_a0f6069eadf492d970c3eb8cdf656e742"><div class="ttname"><a href="class_hash_transformation.html#a0f6069eadf492d970c3eb8cdf656e742">HashTransformation::TruncatedVerify</a></div><div class="ttdeci">virtual bool TruncatedVerify(const byte *digest, size_t digestLength)</div><div class="ttdoc">Verifies the hash of the current message. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8cpp_source.html#l00412">cryptlib.cpp:412</a></div></div>
<div class="ttc" id="class_p_k___signature_scheme_html_aab30ad8e2da2d706cf6c69bdac963afc"><div class="ttname"><a href="class_p_k___signature_scheme.html#aab30ad8e2da2d706cf6c69bdac963afc">PK_SignatureScheme::SignatureLength</a></div><div class="ttdeci">virtual size_t SignatureLength() const =0</div><div class="ttdoc">Provides the signature length if it only depends on the key. </div></div>
<div class="ttc" id="class_sec_byte_block_html"><div class="ttname"><a href="class_sec_byte_block.html">SecByteBlock</a></div><div class="ttdoc">SecBlock&lt;byte&gt; typedef. </div><div class="ttdef"><b>Definition:</b> <a href="secblock_8h_source.html#l00822">secblock.h:822</a></div></div>
<div class="ttc" id="class_byte_array_parameter_html"><div class="ttname"><a href="class_byte_array_parameter.html">ByteArrayParameter</a></div><div class="ttdoc">Used to pass byte array input as part of a NameValuePairs object. </div><div class="ttdef"><b>Definition:</b> <a href="algparam_8h_source.html#l00094">algparam.h:94</a></div></div>
<div class="ttc" id="class_buffered_transformation_html"><div class="ttname"><a href="class_buffered_transformation.html">BufferedTransformation</a></div><div class="ttdoc">Interface for buffered transformations. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l01545">cryptlib.h:1545</a></div></div>
<div class="ttc" id="class_signature_verification_filter_html_a7c6d805105a4c57f0bcb8dc013a723e1"><div class="ttname"><a href="class_signature_verification_filter.html#a7c6d805105a4c57f0bcb8dc013a723e1">SignatureVerificationFilter::SignatureVerificationFilter</a></div><div class="ttdeci">SignatureVerificationFilter(const PK_Verifier &amp;verifier, BufferedTransformation *attachment=NULL, word32 flags=DEFAULT_FLAGS)</div><div class="ttdoc">Construct a SignatureVerificationFilter. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l01079">filters.cpp:1079</a></div></div>
<div class="ttc" id="class_signer_filter_html_adf4aaa798c16e2ee90bbd39b876df717"><div class="ttname"><a href="class_signer_filter.html#adf4aaa798c16e2ee90bbd39b876df717">SignerFilter::IsolatedInitialize</a></div><div class="ttdeci">void IsolatedInitialize(const NameValuePairs &amp;parameters)</div><div class="ttdoc">Initialize or reinitialize this object, without signal propagation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l01057">filters.cpp:1057</a></div></div>
<div class="ttc" id="classmember__ptr_html"><div class="ttname"><a href="classmember__ptr.html">member_ptr</a></div><div class="ttdoc">Pointer that overloads operator -&gt; </div><div class="ttdef"><b>Definition:</b> <a href="smartptr_8h_source.html#l00036">smartptr.h:36</a></div></div>
<div class="ttc" id="class_authenticated_decryption_filter_html_a2181e843a0e19b1b256498d905e2c5dfa4e00a012cd175ded3a65f1664620adec"><div class="ttname"><a href="class_authenticated_decryption_filter.html#a2181e843a0e19b1b256498d905e2c5dfa4e00a012cd175ded3a65f1664620adec">AuthenticatedDecryptionFilter::DEFAULT_FLAGS</a></div><div class="ttdoc">Default flags using THROW_EXCEPTION. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00699">filters.h:699</a></div></div>
<div class="ttc" id="class_authenticated_encryption_filter_html_a372eb12964b7974cf58154589ede32ad"><div class="ttname"><a href="class_authenticated_encryption_filter.html#a372eb12964b7974cf58154589ede32ad">AuthenticatedEncryptionFilter::LastPut</a></div><div class="ttdeci">void LastPut(const byte *inString, size_t length)</div><div class="ttdoc">Input the last block of data. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00984">filters.cpp:984</a></div></div>
<div class="ttc" id="class_buffered_transformation_html_ae15df84a7b67c25dfe2ce0ef5a74123c"><div class="ttname"><a href="class_buffered_transformation.html#ae15df84a7b67c25dfe2ce0ef5a74123c">BufferedTransformation::PutModifiable</a></div><div class="ttdeci">size_t PutModifiable(byte *inString, size_t length, bool blocking=true)</div><div class="ttdoc">Input multiple bytes that may be modified by callee. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l01621">cryptlib.h:1621</a></div></div>
<div class="ttc" id="class_authenticated_encryption_filter_html_aad275712b531d24e3ac4d332d46f1dd4"><div class="ttname"><a href="class_authenticated_encryption_filter.html#aad275712b531d24e3ac4d332d46f1dd4">AuthenticatedEncryptionFilter::IsolatedInitialize</a></div><div class="ttdeci">void IsolatedInitialize(const NameValuePairs &amp;parameters)</div><div class="ttdoc">Initialize or reinitialize this object, without signal propagation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00956">filters.cpp:956</a></div></div>
<div class="ttc" id="struct_block_padding_scheme_def_html_abea06c498771e8f0ad0fbbc19416a979a77a93fa2940abd30d0678927ab6f3587"><div class="ttname"><a href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979a77a93fa2940abd30d0678927ab6f3587">BlockPaddingSchemeDef::ONE_AND_ZEROS_PADDING</a></div><div class="ttdoc">1 and 0&amp;#39;s padding added to a block </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00482">filters.h:482</a></div></div>
<div class="ttc" id="class_hash_verification_filter_html_a27983e6af704b2f42ec10c76cc70efe0"><div class="ttname"><a href="class_hash_verification_filter.html#a27983e6af704b2f42ec10c76cc70efe0">HashVerificationFilter::HashVerificationFilter</a></div><div class="ttdeci">HashVerificationFilter(HashTransformation &amp;hm, BufferedTransformation *attachment=NULL, word32 flags=DEFAULT_FLAGS, int truncatedDigestSize=-1)</div><div class="ttdoc">Construct a HashVerificationFilter. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00889">filters.cpp:889</a></div></div>
<div class="ttc" id="class_stream_transformation_html_a62db1393d64069b282e3d455b38cd0e5"><div class="ttname"><a href="class_stream_transformation.html#a62db1393d64069b282e3d455b38cd0e5">StreamTransformation::IsLastBlockSpecial</a></div><div class="ttdeci">virtual bool IsLastBlockSpecial() const</div><div class="ttdoc">Determines if the last block receives special processing. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l01007">cryptlib.h:1007</a></div></div>
<div class="ttc" id="class_buffered_transformation_html_a20ae0ef2e4ff338b43849e541e9b940f"><div class="ttname"><a href="class_buffered_transformation.html#a20ae0ef2e4ff338b43849e541e9b940f">BufferedTransformation::MessageEnd</a></div><div class="ttdeci">bool MessageEnd(int propagation=-1, bool blocking=true)</div><div class="ttdoc">Signals the end of messages to the object. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l01629">cryptlib.h:1629</a></div></div>
<div class="ttc" id="class_buffered_transformation_html_a9f6cbec970dcb509b23a08fb28b3e055"><div class="ttname"><a href="class_buffered_transformation.html#a9f6cbec970dcb509b23a08fb28b3e055">BufferedTransformation::Attach</a></div><div class="ttdeci">virtual void Attach(BufferedTransformation *newAttachment)</div><div class="ttdoc">Add newAttachment to the end of attachment chain. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8cpp_source.html#l00809">cryptlib.cpp:809</a></div></div>
<div class="ttc" id="class_not_implemented_html"><div class="ttname"><a href="class_not_implemented.html">NotImplemented</a></div><div class="ttdoc">A method was called which was not implemented. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l00220">cryptlib.h:220</a></div></div>
<div class="ttc" id="class_const_byte_array_parameter_html_ab89acc8dae383f2663dd3864651e8ef1"><div class="ttname"><a href="class_const_byte_array_parameter.html#ab89acc8dae383f2663dd3864651e8ef1">ConstByteArrayParameter::begin</a></div><div class="ttdeci">const byte * begin() const</div><div class="ttdoc">Pointer to the first byte in the memory block. </div><div class="ttdef"><b>Definition:</b> <a href="algparam_8h_source.html#l00080">algparam.h:80</a></div></div>
<div class="ttc" id="class_array_sink_html_ad3459c605b5eb52fa24efcb4dc35d29d"><div class="ttname"><a href="class_array_sink.html#ad3459c605b5eb52fa24efcb4dc35d29d">ArraySink::Put2</a></div><div class="ttdeci">size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking)</div><div class="ttdoc">Input multiple bytes for processing. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00534">filters.cpp:534</a></div></div>
<div class="ttc" id="class_buffered_transformation_html_ae70658b0d271f8e114ac6c3cc9774ede"><div class="ttname"><a href="class_buffered_transformation.html#ae70658b0d271f8e114ac6c3cc9774ede">BufferedTransformation::Put</a></div><div class="ttdeci">size_t Put(byte inByte, bool blocking=true)</div><div class="ttdoc">Input a byte for processing. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l01567">cryptlib.h:1567</a></div></div>
<div class="ttc" id="class_stream_transformation_html_a3244f76963a12a5ab6112326c7af9724"><div class="ttname"><a href="class_stream_transformation.html#a3244f76963a12a5ab6112326c7af9724">StreamTransformation::IsForwardTransformation</a></div><div class="ttdeci">virtual bool IsForwardTransformation() const =0</div><div class="ttdoc">Determines if the cipher is being operated in its forward direction. </div></div>
<div class="ttc" id="class_signer_filter_html_acfba1ed693cebff62db4d2bde7c011e5"><div class="ttname"><a href="class_signer_filter.html#acfba1ed693cebff62db4d2bde7c011e5">SignerFilter::Put2</a></div><div class="ttdeci">size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking)</div><div class="ttdoc">Input multiple bytes for processing. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l01063">filters.cpp:1063</a></div></div>
<div class="ttc" id="class_filter_html_a93817876b45172108fe0342de6442f75"><div class="ttname"><a href="class_filter.html#a93817876b45172108fe0342de6442f75">Filter::Detach</a></div><div class="ttdeci">void Detach(BufferedTransformation *newAttachment=NULL)</div><div class="ttdoc">Replace an attached transformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00050">filters.cpp:50</a></div></div>
<div class="ttc" id="cryptlib_8h_html_a9a69ab5a5e0f58279c43f4f51809c84a"><div class="ttname"><a href="cryptlib_8h.html#a9a69ab5a5e0f58279c43f4f51809c84a">DEFAULT_CHANNEL</a></div><div class="ttdeci">const std::string DEFAULT_CHANNEL</div><div class="ttdoc">Default channel for BufferedTransformation. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l00481">cryptlib.h:481</a></div></div>
<div class="ttc" id="algparam_8h_html_aa13eee74de98cf8aaa7e83f4fae7f28b"><div class="ttname"><a href="algparam_8h.html#aa13eee74de98cf8aaa7e83f4fae7f28b">MakeParameters</a></div><div class="ttdeci">AlgorithmParameters MakeParameters(const char *name, const T &amp;value, bool throwIfNotUsed=true)</div><div class="ttdoc">Create an object that implements NameValuePairs. </div><div class="ttdef"><b>Definition:</b> <a href="algparam_8h_source.html#l00502">algparam.h:502</a></div></div>
<div class="ttc" id="class_buffered_transformation_html_ae0fc63d42d94958f71fc573b17469921"><div class="ttname"><a href="class_buffered_transformation.html#ae0fc63d42d94958f71fc573b17469921">BufferedTransformation::ChannelMessageSeriesEnd</a></div><div class="ttdeci">virtual bool ChannelMessageSeriesEnd(const std::string &amp;channel, int propagation=-1, bool blocking=true)</div><div class="ttdoc">Marks the end of a series of messages on a channel. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8cpp_source.html#l00500">cryptlib.cpp:500</a></div></div>
<div class="ttc" id="class_stream_transformation_html_ae224d250f716e82c54bc4e4c8930d188"><div class="ttname"><a href="class_stream_transformation.html#ae224d250f716e82c54bc4e4c8930d188">StreamTransformation::MandatoryBlockSize</a></div><div class="ttdeci">virtual unsigned int MandatoryBlockSize() const</div><div class="ttdoc">Provides the mandatory block size of the cipher. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l00918">cryptlib.h:918</a></div></div>
<div class="ttc" id="class_buffered_transformation_html_a8a62b1b6c8f310363f32b05b20c306eb"><div class="ttname"><a href="class_buffered_transformation.html#a8a62b1b6c8f310363f32b05b20c306eb">BufferedTransformation::Flush</a></div><div class="ttdeci">virtual bool Flush(bool hardFlush, int propagation=-1, bool blocking=true)</div><div class="ttdoc">Flush buffered input and/or output, with signal propagation. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8cpp_source.html#l00446">cryptlib.cpp:446</a></div></div>
<div class="ttc" id="class_filter_html_ac8fc888888b2dad88bf64fc703044a93"><div class="ttname"><a href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">Filter::AttachedTransformation</a></div><div class="ttdeci">BufferedTransformation * AttachedTransformation()</div><div class="ttdoc">Retrieve attached transformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00036">filters.cpp:36</a></div></div>
<div class="ttc" id="class_stream_transformation_html_ab8422f6eee08fbc70069e222186e90de"><div class="ttname"><a href="class_stream_transformation.html#ab8422f6eee08fbc70069e222186e90de">StreamTransformation::GetOptimalBlockSizeUsed</a></div><div class="ttdeci">virtual unsigned int GetOptimalBlockSizeUsed() const</div><div class="ttdoc">Provides the number of bytes used in the current block when processing at optimal block size...</div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l00929">cryptlib.h:929</a></div></div>
<div class="ttc" id="namespace_name_html_ac588f444a195914b81ba67aaf0019735"><div class="ttname"><a href="namespace_name.html#ac588f444a195914b81ba67aaf0019735">Name::PutMessage</a></div><div class="ttdeci">const char * PutMessage()</div><div class="ttdoc">bool </div><div class="ttdef"><b>Definition:</b> <a href="argnames_8h_source.html#l00050">argnames.h:50</a></div></div>
<div class="ttc" id="class_meter_filter_html_a03c8af7442aa844e83e4c45397373f14"><div class="ttname"><a href="class_meter_filter.html#a03c8af7442aa844e83e4c45397373f14">MeterFilter::PutModifiable2</a></div><div class="ttdeci">size_t PutModifiable2(byte *inString, size_t length, int messageEnd, bool blocking)</div><div class="ttdoc">Input multiple bytes that may be modified by callee. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00237">filters.cpp:237</a></div></div>
<div class="ttc" id="class_hash_verification_filter_html_a4e171785f3f9b00d0a10f4c2afa1cc70aaba5187c6265a8684096f2b4d4bfa9d1"><div class="ttname"><a href="class_hash_verification_filter.html#a4e171785f3f9b00d0a10f4c2afa1cc70aaba5187c6265a8684096f2b4d4bfa9d1">HashVerificationFilter::PUT_MESSAGE</a></div><div class="ttdoc">Indicates the message should be passed to an attached transformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00601">filters.h:601</a></div></div>
<div class="ttc" id="class_authenticated_encryption_filter_html_a061422f8897f1a9545ba47f7ff0d8d5b"><div class="ttname"><a href="class_authenticated_encryption_filter.html#a061422f8897f1a9545ba47f7ff0d8d5b">AuthenticatedEncryptionFilter::ChannelPut2</a></div><div class="ttdeci">size_t ChannelPut2(const std::string &amp;channel, const byte *begin, size_t length, int messageEnd, bool blocking)</div><div class="ttdoc">Input multiple bytes for processing on a channel. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00973">filters.cpp:973</a></div></div>
<div class="ttc" id="class_authenticated_decryption_filter_html_af4e30b147daa507238e9bee3715a3a23"><div class="ttname"><a href="class_authenticated_decryption_filter.html#af4e30b147daa507238e9bee3715a3a23">AuthenticatedDecryptionFilter::ChannelCreatePutSpace</a></div><div class="ttdeci">byte * ChannelCreatePutSpace(const std::string &amp;channel, size_t &amp;size)</div><div class="ttdoc">Request space which can be written into by the caller. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l01013">filters.cpp:1013</a></div></div>
<div class="ttc" id="struct_buffered_transformation_1_1_invalid_channel_name_html"><div class="ttname"><a href="struct_buffered_transformation_1_1_invalid_channel_name.html">BufferedTransformation::InvalidChannelName</a></div><div class="ttdoc">Exception thrown when a filter does not recognize a named channel. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l02044">cryptlib.h:2044</a></div></div>
<div class="ttc" id="class_filter_html_a9cde2dec371b3074cb4ed92d57ef1f24"><div class="ttname"><a href="class_filter.html#a9cde2dec371b3074cb4ed92d57ef1f24">Filter::CopyRangeTo2</a></div><div class="ttdeci">size_t CopyRangeTo2(BufferedTransformation &amp;target, lword &amp;begin, lword end=LWORD_MAX, const std::string &amp;channel=DEFAULT_CHANNEL, bool blocking=true) const</div><div class="ttdoc">Copy bytes from this object to another BufferedTransformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00061">filters.cpp:61</a></div></div>
<div class="ttc" id="class_array_sink_html_a535e57a894542c088131bc84955c475b"><div class="ttname"><a href="class_array_sink.html#a535e57a894542c088131bc84955c475b">ArraySink::CreatePutSpace</a></div><div class="ttdeci">byte * CreatePutSpace(size_t &amp;size)</div><div class="ttdoc">Request space which can be written into by the caller. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00550">filters.cpp:550</a></div></div>
<div class="ttc" id="pch_8h_html"><div class="ttname"><a href="pch_8h.html">pch.h</a></div><div class="ttdoc">Precompiled header file. </div></div>
<div class="ttc" id="namespace_name_html_ac664b5e9ab556ada75739f0532759c12"><div class="ttname"><a href="namespace_name.html#ac664b5e9ab556ada75739f0532759c12">Name::InputBuffer</a></div><div class="ttdeci">const char * InputBuffer()</div><div class="ttdoc">ConstByteArrayParameter. </div><div class="ttdef"><b>Definition:</b> <a href="argnames_8h_source.html#l00056">argnames.h:56</a></div></div>
<div class="ttc" id="misc_8h_html_a30712a90999ad9d9152975f2e92d46b8"><div class="ttname"><a href="misc_8h.html#a30712a90999ad9d9152975f2e92d46b8">SaturatingSubtract</a></div><div class="ttdeci">T1 SaturatingSubtract(const T1 &amp;a, const T2 &amp;b)</div><div class="ttdoc">Performs a saturating subtract clamped at 0. </div><div class="ttdef"><b>Definition:</b> <a href="misc_8h_source.html#l00890">misc.h:890</a></div></div>
<div class="ttc" id="misc_8h_html_ac8391e7d9d613a6c401787d2cdab1f51"><div class="ttname"><a href="misc_8h.html#ac8391e7d9d613a6c401787d2cdab1f51">UnsignedMin</a></div><div class="ttdeci">const T1 UnsignedMin(const T1 &amp;a, const T2 &amp;b)</div><div class="ttdoc">Safe comparison of values that could be neagtive and incorrectly promoted. </div><div class="ttdef"><b>Definition:</b> <a href="misc_8h_source.html#l00546">misc.h:546</a></div></div>
<div class="ttc" id="class_buffered_transformation_html_ae6b026f47d8a0ea2e35a6cb8d9ec2c97"><div class="ttname"><a href="class_buffered_transformation.html#ae6b026f47d8a0ea2e35a6cb8d9ec2c97">BufferedTransformation::ChannelPut2</a></div><div class="ttdeci">virtual size_t ChannelPut2(const std::string &amp;channel, const byte *inString, size_t length, int messageEnd, bool blocking)</div><div class="ttdoc">Input multiple bytes for processing on a channel. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8cpp_source.html#l00470">cryptlib.cpp:470</a></div></div>
<div class="ttc" id="class_hash_verification_filter_html_a4e171785f3f9b00d0a10f4c2afa1cc70a9b5a23f94ba704e8fa6b801a1a813de6"><div class="ttname"><a href="class_hash_verification_filter.html#a4e171785f3f9b00d0a10f4c2afa1cc70a9b5a23f94ba704e8fa6b801a1a813de6">HashVerificationFilter::PUT_HASH</a></div><div class="ttdoc">Indicates the hash should be passed to an attached transformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00603">filters.h:603</a></div></div>
<div class="ttc" id="class_meter_filter_html_aa3b923710e4ed83fb4980cb53504a521"><div class="ttname"><a href="class_meter_filter.html#aa3b923710e4ed83fb4980cb53504a521">MeterFilter::IsolatedMessageSeriesEnd</a></div><div class="ttdeci">bool IsolatedMessageSeriesEnd(bool blocking)</div><div class="ttdoc">Marks the end of a series of messages, without signal propagation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00242">filters.cpp:242</a></div></div>
<div class="ttc" id="class_string_store_html_a1272eeca9a2496019bb524faa23ac557"><div class="ttname"><a href="class_string_store.html#a1272eeca9a2496019bb524faa23ac557">StringStore::CopyRangeTo2</a></div><div class="ttdeci">size_t CopyRangeTo2(BufferedTransformation &amp;target, lword &amp;begin, lword end=LWORD_MAX, const std::string &amp;channel=DEFAULT_CHANNEL, bool blocking=true) const</div><div class="ttdoc">Copy bytes from this object to another BufferedTransformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l01204">filters.cpp:1204</a></div></div>
<div class="ttc" id="class_array_xor_sink_html_a20637eac89903059461b27d621dcc339"><div class="ttname"><a href="class_array_xor_sink.html#a20637eac89903059461b27d621dcc339">ArrayXorSink::Put2</a></div><div class="ttdeci">size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking)</div><div class="ttdoc">Input multiple bytes for processing. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00565">filters.cpp:565</a></div></div>
<div class="ttc" id="class_array_sink_html_a0b677032fc5455f0ad134d4271ac40c3"><div class="ttname"><a href="class_array_sink.html#a0b677032fc5455f0ad134d4271ac40c3">ArraySink::IsolatedInitialize</a></div><div class="ttdeci">void IsolatedInitialize(const NameValuePairs &amp;parameters)</div><div class="ttdoc">Initialize or reinitialize this object, without signal propagation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00556">filters.cpp:556</a></div></div>
<div class="ttc" id="class_null_store_html_ac56b49281ee6f702ed4d23692e6d5528"><div class="ttname"><a href="class_null_store.html#ac56b49281ee6f702ed4d23692e6d5528">NullStore::TransferTo2</a></div><div class="ttdeci">size_t TransferTo2(BufferedTransformation &amp;target, lword &amp;transferBytes, const std::string &amp;channel=DEFAULT_CHANNEL, bool blocking=true)</div><div class="ttdoc">Transfer bytes from this object to another BufferedTransformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l01248">filters.cpp:1248</a></div></div>
<div class="ttc" id="class_stream_transformation_html"><div class="ttname"><a href="class_stream_transformation.html">StreamTransformation</a></div><div class="ttdoc">Interface for the data processing portion of stream ciphers. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l00898">cryptlib.h:898</a></div></div>
<div class="ttc" id="class_buffered_transformation_html_a7f90ef36f633c97c1ae519b800527d8e"><div class="ttname"><a href="class_buffered_transformation.html#a7f90ef36f633c97c1ae519b800527d8e">BufferedTransformation::CopyRangeTo2</a></div><div class="ttdeci">virtual size_t CopyRangeTo2(BufferedTransformation &amp;target, lword &amp;begin, lword end=LWORD_MAX, const std::string &amp;channel=DEFAULT_CHANNEL, bool blocking=true) const =0</div><div class="ttdoc">Copy bytes from this object to another BufferedTransformation. </div></div>
<div class="ttc" id="class_filter_with_buffered_input_html"><div class="ttname"><a href="class_filter_with_buffered_input.html">FilterWithBufferedInput</a></div><div class="ttdoc">Divides an input stream into discrete blocks. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00311">filters.h:311</a></div></div>
<div class="ttc" id="class_algorithm_html_a4f31510a192d1121856efe8ad0a9b844"><div class="ttname"><a href="class_algorithm.html#a4f31510a192d1121856efe8ad0a9b844">Algorithm::AlgorithmName</a></div><div class="ttdeci">virtual std::string AlgorithmName() const</div><div class="ttdoc">Provides the name of this algorithm. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l00594">cryptlib.h:594</a></div></div>
<div class="ttc" id="misc_8h_html_abe412b0409249cb54899e97bc7d86424"><div class="ttname"><a href="misc_8h.html#abe412b0409249cb54899e97bc7d86424">STDMIN</a></div><div class="ttdeci">const T &amp; STDMIN(const T &amp;a, const T &amp;b)</div><div class="ttdoc">Replacement function for std::min. </div><div class="ttdef"><b>Definition:</b> <a href="misc_8h_source.html#l00507">misc.h:507</a></div></div>
<div class="ttc" id="trap_8h_html_adf3b392588bc94cbeae9f415a78c7b95"><div class="ttname"><a href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a></div><div class="ttdeci">#define CRYPTOPP_ASSERT(exp)</div><div class="ttdoc">Debugging and diagnostic assertion. </div><div class="ttdef"><b>Definition:</b> <a href="trap_8h_source.html#l00060">trap.h:60</a></div></div>
<div class="ttc" id="class_buffered_transformation_html_aaf09f0cd6dbd022539a9ac5c316d4984"><div class="ttname"><a href="class_buffered_transformation.html#aaf09f0cd6dbd022539a9ac5c316d4984">BufferedTransformation::IsolatedMessageSeriesEnd</a></div><div class="ttdeci">virtual bool IsolatedMessageSeriesEnd(bool blocking)</div><div class="ttdoc">Marks the end of a series of messages, without signal propagation. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l01716">cryptlib.h:1716</a></div></div>
<div class="ttc" id="class_buffered_transformation_html_a8c1e2ca57fc06a1f3694d8fe7f8508ff"><div class="ttname"><a href="class_buffered_transformation.html#a8c1e2ca57fc06a1f3694d8fe7f8508ff">BufferedTransformation::AnyRetrievable</a></div><div class="ttdeci">virtual bool AnyRetrievable() const</div><div class="ttdoc">Determines whether bytes are ready for retrieval. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8cpp_source.html#l00520">cryptlib.cpp:520</a></div></div>
<div class="ttc" id="class_p_k___verifier_html_acd874268dab653dde01409fc9dfd2069"><div class="ttname"><a href="class_p_k___verifier.html#acd874268dab653dde01409fc9dfd2069">PK_Verifier::NewVerificationAccumulator</a></div><div class="ttdeci">virtual PK_MessageAccumulator * NewVerificationAccumulator() const =0</div><div class="ttdoc">Create a new HashTransformation to accumulate the message to be verified. </div></div>
<div class="ttc" id="class_name_value_pairs_html_af28f6e7abf98606d8146bfda271e99db"><div class="ttname"><a href="class_name_value_pairs.html#af28f6e7abf98606d8146bfda271e99db">NameValuePairs::GetRequiredParameter</a></div><div class="ttdeci">void GetRequiredParameter(const char *className, const char *name, T &amp;value) const</div><div class="ttdoc">Retrieves a required name/value pair. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l00418">cryptlib.h:418</a></div></div>
<div class="ttc" id="class_buffered_transformation_html_a68044dc8d57bc02edee1ce02b459a63d"><div class="ttname"><a href="class_buffered_transformation.html#a68044dc8d57bc02edee1ce02b459a63d">BufferedTransformation::IsolatedFlush</a></div><div class="ttdeci">virtual bool IsolatedFlush(bool hardFlush, bool blocking)=0</div><div class="ttdoc">Flushes data buffered by this object, without signal propagation. </div></div>
<div class="ttc" id="filters_8h_html"><div class="ttname"><a href="filters_8h.html">filters.h</a></div><div class="ttdoc">Implementation of BufferedTransformation&amp;#39;s attachment interface. </div></div>
<div class="ttc" id="class_random_number_sink_html_aed57770519427841e3aac3abc251bc64"><div class="ttname"><a href="class_random_number_sink.html#aed57770519427841e3aac3abc251bc64">RandomNumberSink::Put2</a></div><div class="ttdeci">size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking)</div><div class="ttdoc">Input multiple bytes for processing. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00527">filters.cpp:527</a></div></div>
<div class="ttc" id="class_invalid_ciphertext_html"><div class="ttname"><a href="class_invalid_ciphertext.html">InvalidCiphertext</a></div><div class="ttdoc">A decryption filter encountered invalid ciphertext. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l00213">cryptlib.h:213</a></div></div>
<div class="ttc" id="namespace_name_html_a54b71c75bd8b50e8bddfacf1f7b7b338"><div class="ttname"><a href="namespace_name.html#a54b71c75bd8b50e8bddfacf1f7b7b338">Name::OutputBuffer</a></div><div class="ttdeci">const char * OutputBuffer()</div><div class="ttdoc">ByteArrayParameter. </div><div class="ttdef"><b>Definition:</b> <a href="argnames_8h_source.html#l00057">argnames.h:57</a></div></div>
<div class="ttc" id="struct_buffered_transformation_1_1_blocking_input_only_html"><div class="ttname"><a href="struct_buffered_transformation_1_1_blocking_input_only.html">BufferedTransformation::BlockingInputOnly</a></div><div class="ttdoc">Exception thrown by objects that have not implemented nonblocking input processing. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l01669">cryptlib.h:1669</a></div></div>
<div class="ttc" id="class_stream_transformation_filter_html"><div class="ttname"><a href="class_stream_transformation_filter.html">StreamTransformationFilter</a></div><div class="ttdoc">Filter wrapper for StreamTransformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00500">filters.h:500</a></div></div>
<div class="ttc" id="struct_block_padding_scheme_def_html_abea06c498771e8f0ad0fbbc19416a979a33d1ed83310e9d60f606a60af3cc6559"><div class="ttname"><a href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979a33d1ed83310e9d60f606a60af3cc6559">BlockPaddingSchemeDef::W3C_PADDING</a></div><div class="ttdoc">W3C padding added to a block. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00487">filters.h:487</a></div></div>
<div class="ttc" id="class_filter_html_ab24c6c52bb6185c25ee6efcced36dbd0"><div class="ttname"><a href="class_filter.html#ab24c6c52bb6185c25ee6efcced36dbd0">Filter::TransferTo2</a></div><div class="ttdeci">size_t TransferTo2(BufferedTransformation &amp;target, lword &amp;transferBytes, const std::string &amp;channel=DEFAULT_CHANNEL, bool blocking=true)</div><div class="ttdoc">Transfer bytes from this object to another BufferedTransformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00066">filters.cpp:66</a></div></div>
<div class="ttc" id="class_hash_filter_html_a5c2f3a90ced66c835969ce1aa235b63e"><div class="ttname"><a href="class_hash_filter.html#a5c2f3a90ced66c835969ce1aa235b63e">HashFilter::CreatePutSpace</a></div><div class="ttdeci">byte * CreatePutSpace(size_t &amp;size)</div><div class="ttdoc">Request space which can be written into by the caller. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00567">filters.h:567</a></div></div>
<div class="ttc" id="class_filter_with_buffered_input_html_a8c60c4e6452fdeb61f9d888bf50a706d"><div class="ttname"><a href="class_filter_with_buffered_input.html#a8c60c4e6452fdeb61f9d888bf50a706d">FilterWithBufferedInput::FilterWithBufferedInput</a></div><div class="ttdeci">FilterWithBufferedInput(BufferedTransformation *attachment)</div><div class="ttdoc">Construct a FilterWithBufferedInput with an attached transformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00315">filters.cpp:315</a></div></div>
<div class="ttc" id="class_buffered_transformation_html_a84c3629cdd9be90695c9701c1b8e24a2"><div class="ttname"><a href="class_buffered_transformation.html#a84c3629cdd9be90695c9701c1b8e24a2">BufferedTransformation::TransferAllTo</a></div><div class="ttdeci">void TransferAllTo(BufferedTransformation &amp;target, const std::string &amp;channel=DEFAULT_CHANNEL)</div><div class="ttdoc">Transfer all bytes from this object to another BufferedTransformation. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l01952">cryptlib.h:1952</a></div></div>
<div class="ttc" id="class_p_k___verifier_html"><div class="ttname"><a href="class_p_k___verifier.html">PK_Verifier</a></div><div class="ttdoc">Interface for public-key signature verifiers. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l02769">cryptlib.h:2769</a></div></div>
<div class="ttc" id="class_p_k___signer_html_ac8e0cecd225c0fdbb335713101e079cd"><div class="ttname"><a href="class_p_k___signer.html#ac8e0cecd225c0fdbb335713101e079cd">PK_Signer::Sign</a></div><div class="ttdeci">virtual size_t Sign(RandomNumberGenerator &amp;rng, PK_MessageAccumulator *messageAccumulator, byte *signature) const</div><div class="ttdoc">Sign and delete the messageAccumulator. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8cpp_source.html#l00915">cryptlib.cpp:915</a></div></div>
<div class="ttc" id="class_hash_transformation_html_a9f42cc280bac76b884ad12615c0dabb5"><div class="ttname"><a href="class_hash_transformation.html#a9f42cc280bac76b884ad12615c0dabb5">HashTransformation::DigestSize</a></div><div class="ttdeci">virtual unsigned int DigestSize() const =0</div><div class="ttdoc">Provides the digest size of the hash. </div></div>
<div class="ttc" id="class_signature_verification_filter_html_a3673220151c47758b53dda37c8210180a8b7c4e61666442d3db88e86fd985a2a5"><div class="ttname"><a href="class_signature_verification_filter.html#a3673220151c47758b53dda37c8210180a8b7c4e61666442d3db88e86fd985a2a5">SignatureVerificationFilter::PUT_RESULT</a></div><div class="ttdoc">Indicates the result of the verification should be passed to an attached transformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00796">filters.h:796</a></div></div>
<div class="ttc" id="class_byte_array_parameter_html_a5f4b9c9a11ba16472cec72c56f2787cc"><div class="ttname"><a href="class_byte_array_parameter.html#a5f4b9c9a11ba16472cec72c56f2787cc">ByteArrayParameter::begin</a></div><div class="ttdeci">byte * begin() const</div><div class="ttdoc">Pointer to the first byte in the memory block. </div><div class="ttdef"><b>Definition:</b> <a href="algparam_8h_source.html#l00109">algparam.h:109</a></div></div>
<div class="ttc" id="class_proxy_filter_html_a1eb33984fa222e94a7048455fc17ab20"><div class="ttname"><a href="class_proxy_filter.html#a1eb33984fa222e94a7048455fc17ab20">ProxyFilter::ProxyFilter</a></div><div class="ttdeci">ProxyFilter(BufferedTransformation *filter, size_t firstSize, size_t lastSize, BufferedTransformation *attachment)</div><div class="ttdoc">Construct a ProxyFilter. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00484">filters.cpp:484</a></div></div>
<div class="ttc" id="misc_8h_html_a6aaae7768600b9d735a5e1b8192035f8"><div class="ttname"><a href="misc_8h.html#a6aaae7768600b9d735a5e1b8192035f8">xorbuf</a></div><div class="ttdeci">void xorbuf(byte *buf, const byte *mask, size_t count)</div><div class="ttdoc">Performs an XOR of a buffer with a mask. </div><div class="ttdef"><b>Definition:</b> <a href="misc_8cpp_source.html#l00032">misc.cpp:32</a></div></div>
<div class="ttc" id="class_random_number_store_html_aa7c2e0b12f4c8909f9424bbc77eb85dd"><div class="ttname"><a href="class_random_number_store.html#aa7c2e0b12f4c8909f9424bbc77eb85dd">RandomNumberStore::TransferTo2</a></div><div class="ttdeci">size_t TransferTo2(BufferedTransformation &amp;target, lword &amp;transferBytes, const std::string &amp;channel=DEFAULT_CHANNEL, bool blocking=true)</div><div class="ttdoc">Transfer bytes from this object to another BufferedTransformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l01222">filters.cpp:1222</a></div></div>
<div class="ttc" id="class_buffered_transformation_html_a7693f056b01bc4feadd8a794fba2d30a"><div class="ttname"><a href="class_buffered_transformation.html#a7693f056b01bc4feadd8a794fba2d30a">BufferedTransformation::CopyTo</a></div><div class="ttdeci">lword CopyTo(BufferedTransformation &amp;target, lword copyMax=LWORD_MAX, const std::string &amp;channel=DEFAULT_CHANNEL) const</div><div class="ttdoc">copy copyMax bytes of the buffered output to target as input </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l01873">cryptlib.h:1873</a></div></div>
<div class="ttc" id="class_filter_with_buffered_input_html_afa0096257c94f94c3a5938a0e826c46f"><div class="ttname"><a href="class_filter_with_buffered_input.html#afa0096257c94f94c3a5938a0e826c46f">FilterWithBufferedInput::ForceNextPut</a></div><div class="ttdeci">void ForceNextPut()</div><div class="ttdoc">Flushes data buffered by this object. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00441">filters.cpp:441</a></div></div>
<div class="ttc" id="class_hash_transformation_html"><div class="ttname"><a href="class_hash_transformation.html">HashTransformation</a></div><div class="ttdoc">Interface for hash functions and data processing part of MACs. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l01065">cryptlib.h:1065</a></div></div>
<div class="ttc" id="class_buffered_transformation_html_af390325c959c3d6a2c03a447d6cd469d"><div class="ttname"><a href="class_buffered_transformation.html#af390325c959c3d6a2c03a447d6cd469d">BufferedTransformation::CreatePutSpace</a></div><div class="ttdeci">virtual byte * CreatePutSpace(size_t &amp;size)</div><div class="ttdoc">Request space which can be written into by the caller. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l01606">cryptlib.h:1606</a></div></div>
<div class="ttc" id="class_proxy_filter_html_ae5d15b0c5bcc601a58dde22e01ce9b79"><div class="ttname"><a href="class_proxy_filter.html#ae5d15b0c5bcc601a58dde22e01ce9b79">ProxyFilter::IsolatedFlush</a></div><div class="ttdeci">bool IsolatedFlush(bool hardFlush, bool blocking)</div><div class="ttdoc">Flushes data buffered by this object, without signal propagation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00491">filters.cpp:491</a></div></div>
<div class="ttc" id="struct_block_padding_scheme_def_html_abea06c498771e8f0ad0fbbc19416a979ae6ae59c8e974534a292a2f0b11131f08"><div class="ttname"><a href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979ae6ae59c8e974534a292a2f0b11131f08">BlockPaddingSchemeDef::ZEROS_PADDING</a></div><div class="ttdoc">0&amp;#39;s padding added to a block </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00476">filters.h:476</a></div></div>
<div class="ttc" id="namespace_name_html_a0200d7e5692b4343517eb57b1fb9e0f2"><div class="ttname"><a href="namespace_name.html#a0200d7e5692b4343517eb57b1fb9e0f2">Name::TruncatedDigestSize</a></div><div class="ttdeci">const char * TruncatedDigestSize()</div><div class="ttdoc">int </div><div class="ttdef"><b>Definition:</b> <a href="argnames_8h_source.html#l00051">argnames.h:51</a></div></div>
<div class="ttc" id="class_filter_html"><div class="ttname"><a href="class_filter.html">Filter</a></div><div class="ttdoc">Implementation of BufferedTransformation&amp;#39;s attachment interface. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00035">filters.h:35</a></div></div>
<div class="ttc" id="class_p_k___signer_html_aff85d006e814ccc8ac943b145a0bfaf9"><div class="ttname"><a href="class_p_k___signer.html#aff85d006e814ccc8ac943b145a0bfaf9">PK_Signer::NewSignatureAccumulator</a></div><div class="ttdeci">virtual PK_MessageAccumulator * NewSignatureAccumulator(RandomNumberGenerator &amp;rng) const =0</div><div class="ttdoc">Create a new HashTransformation to accumulate the message to be signed. </div></div>
<div class="ttc" id="misc_8h_html_af1490597cb11989e78d5ba5b5f21266b"><div class="ttname"><a href="misc_8h.html#af1490597cb11989e78d5ba5b5f21266b">STDMAX</a></div><div class="ttdeci">const T &amp; STDMAX(const T &amp;a, const T &amp;b)</div><div class="ttdoc">Replacement function for std::max. </div><div class="ttdef"><b>Definition:</b> <a href="misc_8h_source.html#l00518">misc.h:518</a></div></div>
<div class="ttc" id="class_buffered_transformation_html_aa10b7e626f5af900a4d12f6e5d125891"><div class="ttname"><a href="class_buffered_transformation.html#aa10b7e626f5af900a4d12f6e5d125891">BufferedTransformation::PutMessageEnd</a></div><div class="ttdeci">size_t PutMessageEnd(const byte *inString, size_t length, int propagation=-1, bool blocking=true)</div><div class="ttdoc">Input multiple bytes for processing and signal the end of a message. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l01643">cryptlib.h:1643</a></div></div>
<div class="ttc" id="struct_block_padding_scheme_def_html_abea06c498771e8f0ad0fbbc19416a979ad929ced62ab4871b2d9b87cab0b47887"><div class="ttname"><a href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979ad929ced62ab4871b2d9b87cab0b47887">BlockPaddingSchemeDef::NO_PADDING</a></div><div class="ttdoc">No padding added to a block. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00473">filters.h:473</a></div></div>
<div class="ttc" id="class_filter_html_a0c011bdc71755b373292e7a722e9e332"><div class="ttname"><a href="class_filter.html#a0c011bdc71755b373292e7a722e9e332">Filter::Initialize</a></div><div class="ttdeci">void Initialize(const NameValuePairs &amp;parameters=g_nullNameValuePairs, int propagation=-1)</div><div class="ttdoc">Initialize or reinitialize this object, with signal propagation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00071">filters.cpp:71</a></div></div>
<div class="ttc" id="namespace_crypto_p_p_html"><div class="ttname"><a href="namespace_crypto_p_p.html">CryptoPP</a></div><div class="ttdoc">Crypto++ library namespace. </div></div>
<div class="ttc" id="class_redirector_html_af5fe25d9b6e17ec878e8f2b188702736"><div class="ttname"><a href="class_redirector.html#af5fe25d9b6e17ec878e8f2b188702736">Redirector::Initialize</a></div><div class="ttdeci">void Initialize(const NameValuePairs &amp;parameters, int propagation)</div><div class="ttdoc">Initialize or reinitialize this object, with signal propagation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00473">filters.cpp:473</a></div></div>
<div class="ttc" id="class_string_store_html_acca5c45df0db23ac71fb363d7005743b"><div class="ttname"><a href="class_string_store.html#acca5c45df0db23ac71fb363d7005743b">StringStore::TransferTo2</a></div><div class="ttdeci">size_t TransferTo2(BufferedTransformation &amp;target, lword &amp;transferBytes, const std::string &amp;channel=DEFAULT_CHANNEL, bool blocking=true)</div><div class="ttdoc">Transfer bytes from this object to another BufferedTransformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l01195">filters.cpp:1195</a></div></div>
<div class="ttc" id="struct_block_padding_scheme_def_html_abea06c498771e8f0ad0fbbc19416a979a622df395c2f0edc35f722d938faaad1f"><div class="ttname"><a href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979a622df395c2f0edc35f722d938faaad1f">BlockPaddingSchemeDef::PKCS_PADDING</a></div><div class="ttdoc">PKCS #5 padding added to a block. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00479">filters.h:479</a></div></div>
<div class="ttc" id="class_signature_verification_filter_html_a3673220151c47758b53dda37c8210180a26bac40d24e37a841fcd91b072708baa"><div class="ttname"><a href="class_signature_verification_filter.html#a3673220151c47758b53dda37c8210180a26bac40d24e37a841fcd91b072708baa">SignatureVerificationFilter::SIGNATURE_AT_BEGIN</a></div><div class="ttdoc">Indicates the signature is at the beginning of the message (i.e., concatenation of signature+message)...</div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00790">filters.h:790</a></div></div>
<div class="ttc" id="class_name_value_pairs_html_a5357c3a09602e44671d1e42cb9a9408d"><div class="ttname"><a href="class_name_value_pairs.html#a5357c3a09602e44671d1e42cb9a9408d">NameValuePairs::GetValue</a></div><div class="ttdeci">bool GetValue(const char *name, T &amp;value) const</div><div class="ttdoc">Get a named value. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l00347">cryptlib.h:347</a></div></div>
<div class="ttc" id="class_signature_verification_filter_html_a3673220151c47758b53dda37c8210180aebf3d10447e668123dac4143e170189d"><div class="ttname"><a href="class_signature_verification_filter.html#a3673220151c47758b53dda37c8210180aebf3d10447e668123dac4143e170189d">SignatureVerificationFilter::PUT_SIGNATURE</a></div><div class="ttdoc">Indicates the signature should be passed to an attached transformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00794">filters.h:794</a></div></div>
<div class="ttc" id="class_authenticated_encryption_filter_html_ab50017b68574475d37fc726717fde546"><div class="ttname"><a href="class_authenticated_encryption_filter.html#ab50017b68574475d37fc726717fde546">AuthenticatedEncryptionFilter::AuthenticatedEncryptionFilter</a></div><div class="ttdeci">AuthenticatedEncryptionFilter(AuthenticatedSymmetricCipher &amp;c, BufferedTransformation *attachment=NULL, bool putAAD=false, int truncatedDigestSize=-1, const std::string &amp;macChannel=DEFAULT_CHANNEL, BlockPaddingScheme padding=DEFAULT_PADDING)</div><div class="ttdoc">Construct a AuthenticatedEncryptionFilter. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00948">filters.cpp:948</a></div></div>
<div class="ttc" id="class_p_k___verifier_html_a515aa448e7fc3a5c6e422e65500ab507"><div class="ttname"><a href="class_p_k___verifier.html#a515aa448e7fc3a5c6e422e65500ab507">PK_Verifier::InputSignature</a></div><div class="ttdeci">virtual void InputSignature(PK_MessageAccumulator &amp;messageAccumulator, const byte *signature, size_t signatureLength) const =0</div><div class="ttdoc">Input signature into a message accumulator. </div></div>
<div class="ttc" id="class_signature_verification_filter_html_a3673220151c47758b53dda37c8210180a41f7ffb499849a9d7ca6e0b82445e45f"><div class="ttname"><a href="class_signature_verification_filter.html#a3673220151c47758b53dda37c8210180a41f7ffb499849a9d7ca6e0b82445e45f">SignatureVerificationFilter::DEFAULT_FLAGS</a></div><div class="ttdoc">Default flags using SIGNATURE_AT_BEGIN and PUT_RESULT. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00800">filters.h:800</a></div></div>
<div class="ttc" id="cryptlib_8h_html_aff60e2d96212d25c078c2dd11e45de0e"><div class="ttname"><a href="cryptlib_8h.html#aff60e2d96212d25c078c2dd11e45de0e">AAD_CHANNEL</a></div><div class="ttdeci">const std::string AAD_CHANNEL</div><div class="ttdoc">Channel for additional authenticated data. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l00488">cryptlib.h:488</a></div></div>
<div class="ttc" id="class_filter_with_buffered_input_html_a4261e0491864a31738cf53b3f9343806"><div class="ttname"><a href="class_filter_with_buffered_input.html#a4261e0491864a31738cf53b3f9343806">FilterWithBufferedInput::IsolatedFlush</a></div><div class="ttdeci">bool IsolatedFlush(bool hardFlush, bool blocking)</div><div class="ttdoc">Flushes data buffered by this object, without signal propagation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00338">filters.cpp:338</a></div></div>
<div class="ttc" id="struct_filter_put_space_helper_html_a85fea9f0455741e4b340a3e035df9a39"><div class="ttname"><a href="struct_filter_put_space_helper.html#a85fea9f0455741e4b340a3e035df9a39">FilterPutSpaceHelper::HelpCreatePutSpace</a></div><div class="ttdeci">byte * HelpCreatePutSpace(BufferedTransformation &amp;target, const std::string &amp;channel, size_t minSize, size_t desiredSize, size_t &amp;bufferSize)</div><div class="ttdoc">Create a working space in a BufferedTransformation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00175">filters.h:175</a></div></div>
<div class="ttc" id="class_source_html_a7bc3bec2dc43d81953782f8f1c09aa25"><div class="ttname"><a href="class_source.html#a7bc3bec2dc43d81953782f8f1c09aa25">Source::PumpMessages2</a></div><div class="ttdeci">virtual size_t PumpMessages2(unsigned int &amp;messageCount, bool blocking=true)=0</div><div class="ttdoc">Pump messages to attached transformation. </div></div>
<div class="ttc" id="class_buffered_transformation_html_a0dd5456c06e0e47d901e8055b50df929"><div class="ttname"><a href="class_buffered_transformation.html#a0dd5456c06e0e47d901e8055b50df929">BufferedTransformation::Initialize</a></div><div class="ttdeci">virtual void Initialize(const NameValuePairs &amp;parameters=g_nullNameValuePairs, int propagation=-1)</div><div class="ttdoc">Initialize or reinitialize this object, with signal propagation. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8cpp_source.html#l00439">cryptlib.cpp:439</a></div></div>
<div class="ttc" id="class_invalid_data_format_html"><div class="ttname"><a href="class_invalid_data_format.html">InvalidDataFormat</a></div><div class="ttdoc">Input data was received that did not conform to expected format. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l00206">cryptlib.h:206</a></div></div>
<div class="ttc" id="class_filter_with_buffered_input_html_a9885841f5ecee1403b57c5b1fc28a928"><div class="ttname"><a href="class_filter_with_buffered_input.html#a9885841f5ecee1403b57c5b1fc28a928">FilterWithBufferedInput::Put2</a></div><div class="ttdeci">size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking)</div><div class="ttdoc">Input multiple bytes for processing. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00329">filters.h:329</a></div></div>
<div class="ttc" id="class_stream_transformation_html_af66ef64545279c01310718af3d627534"><div class="ttname"><a href="class_stream_transformation.html#af66ef64545279c01310718af3d627534">StreamTransformation::OptimalBlockSize</a></div><div class="ttdeci">virtual unsigned int OptimalBlockSize() const</div><div class="ttdoc">Provides the input block size most efficient for this cipher. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l00925">cryptlib.h:925</a></div></div>
<div class="ttc" id="class_proxy_filter_html_a98a1d161913c42feb64951c396f0f3e0"><div class="ttname"><a href="class_proxy_filter.html#a98a1d161913c42feb64951c396f0f3e0">ProxyFilter::SetFilter</a></div><div class="ttdeci">void SetFilter(Filter *filter)</div><div class="ttdoc">Sets the OutputProxy filter. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00496">filters.cpp:496</a></div></div>
<div class="ttc" id="class_redirector_html_a2de79d5742280aa614c218c7b950de67a9bedf58acdacc835d476e8783c169c2f"><div class="ttname"><a href="class_redirector.html#a2de79d5742280aa614c218c7b950de67a9bedf58acdacc835d476e8783c169c2f">Redirector::PASS_EVERYTHING</a></div><div class="ttdoc">Pass everything. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00848">filters.h:848</a></div></div>
<div class="ttc" id="class_filter_html_ad845deb5113d2bd04d109c05abfd3098"><div class="ttname"><a href="class_filter.html#ad845deb5113d2bd04d109c05abfd3098">Filter::Flush</a></div><div class="ttdeci">bool Flush(bool hardFlush, int propagation=-1, bool blocking=true)</div><div class="ttdoc">Flush buffered input and/or output, with signal propagation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00078">filters.cpp:78</a></div></div>
<div class="ttc" id="class_hash_transformation_html_aafabefaf445b65d3ba0d8e1c0294afe5"><div class="ttname"><a href="class_hash_transformation.html#aafabefaf445b65d3ba0d8e1c0294afe5">HashTransformation::Update</a></div><div class="ttdeci">virtual void Update(const byte *input, size_t length)=0</div><div class="ttdoc">Updates a hash with additional input. </div></div>
<div class="ttc" id="class_sec_block_html_af5999bffe3193e62719cc0792b0282a7"><div class="ttname"><a href="class_sec_block.html#af5999bffe3193e62719cc0792b0282a7">SecBlock::size</a></div><div class="ttdeci">size_type size() const</div><div class="ttdoc">Provides the count of elements in the SecBlock. </div><div class="ttdef"><b>Definition:</b> <a href="secblock_8h_source.html#l00561">secblock.h:561</a></div></div>
<div class="ttc" id="class_name_value_pairs_html_acfb673d912e1bc19386bebba9d58c23f"><div class="ttname"><a href="class_name_value_pairs.html#acfb673d912e1bc19386bebba9d58c23f">NameValuePairs::GetRequiredIntParameter</a></div><div class="ttdeci">void GetRequiredIntParameter(const char *className, const char *name, int &amp;value) const</div><div class="ttdoc">Retrieves a required name/value pair. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l00433">cryptlib.h:433</a></div></div>
<div class="ttc" id="misc_8h_html_aa2ac57210cb6796eced074e6d2e294fb"><div class="ttname"><a href="misc_8h.html#aa2ac57210cb6796eced074e6d2e294fb">RoundDownToMultipleOf</a></div><div class="ttdeci">T1 RoundDownToMultipleOf(const T1 &amp;n, const T2 &amp;m)</div><div class="ttdoc">Rounds a value down to a multiple of a second value. </div><div class="ttdef"><b>Definition:</b> <a href="misc_8h_source.html#l00941">misc.h:941</a></div></div>
<div class="ttc" id="class_hash_verification_filter_html_a4e171785f3f9b00d0a10f4c2afa1cc70a036f9abd0e6bf25ca9d0e2e9141e505b"><div class="ttname"><a href="class_hash_verification_filter.html#a4e171785f3f9b00d0a10f4c2afa1cc70a036f9abd0e6bf25ca9d0e2e9141e505b">HashVerificationFilter::DEFAULT_FLAGS</a></div><div class="ttdoc">Default flags using HASH_AT_BEGIN and PUT_RESULT. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8h_source.html#l00609">filters.h:609</a></div></div>
<div class="ttc" id="class_random_number_generator_html_a5cc474006e2c7383ec20cc4d0c2abbaf"><div class="ttname"><a href="class_random_number_generator.html#a5cc474006e2c7383ec20cc4d0c2abbaf">RandomNumberGenerator::GenerateIntoBufferedTransformation</a></div><div class="ttdeci">virtual void GenerateIntoBufferedTransformation(BufferedTransformation &amp;target, const std::string &amp;channel, lword length)</div><div class="ttdoc">Generate random bytes into a BufferedTransformation. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8cpp_source.html#l00330">cryptlib.cpp:330</a></div></div>
<div class="ttc" id="class_p_k___signature_scheme_html_a8f62890f0485b9ca58528047871f8894"><div class="ttname"><a href="class_p_k___signature_scheme.html#a8f62890f0485b9ca58528047871f8894">PK_SignatureScheme::SignatureUpfront</a></div><div class="ttdeci">virtual bool SignatureUpfront() const</div><div class="ttdoc">Determines whether the signature must be input before the message. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l02677">cryptlib.h:2677</a></div></div>
<div class="ttc" id="class_random_number_generator_html_a6feb4f0afedb62a495b7a9ae311fa1cb"><div class="ttname"><a href="class_random_number_generator.html#a6feb4f0afedb62a495b7a9ae311fa1cb">RandomNumberGenerator::IncorporateEntropy</a></div><div class="ttdeci">virtual void IncorporateEntropy(const byte *input, size_t length)</div><div class="ttdoc">Update RNG state with additional unpredictable values. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l01343">cryptlib.h:1343</a></div></div>
<div class="ttc" id="class_buffered_transformation_html_ae0b37b299c5835083e58b205f9cc25cc"><div class="ttname"><a href="class_buffered_transformation.html#ae0b37b299c5835083e58b205f9cc25cc">BufferedTransformation::ChannelMessageEnd</a></div><div class="ttdeci">bool ChannelMessageEnd(const std::string &amp;channel, int propagation=-1, bool blocking=true)</div><div class="ttdoc">Signal the end of a message. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l02102">cryptlib.h:2102</a></div></div>
<div class="ttc" id="misc_8h_html_a3c75bb398badb69c7577b21486f9963f"><div class="ttname"><a href="misc_8h.html#a3c75bb398badb69c7577b21486f9963f">SIZE_MAX</a></div><div class="ttdeci">#define SIZE_MAX</div><div class="ttdoc">The maximum value of a machine word. </div><div class="ttdef"><b>Definition:</b> <a href="misc_8h_source.html#l00085">misc.h:85</a></div></div>
<div class="ttc" id="class_stream_transformation_html_a0b7c5bc41b9b5f6443ee32d65ebc044c"><div class="ttname"><a href="class_stream_transformation.html#a0b7c5bc41b9b5f6443ee32d65ebc044c">StreamTransformation::MinLastBlockSize</a></div><div class="ttdeci">virtual unsigned int MinLastBlockSize() const</div><div class="ttdoc">Provides the size of the last block. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l00974">cryptlib.h:974</a></div></div>
<div class="ttc" id="class_hash_filter_html_a950c5cc22d2aa101e731401b10ff2be4"><div class="ttname"><a href="class_hash_filter.html#a950c5cc22d2aa101e731401b10ff2be4">HashFilter::IsolatedInitialize</a></div><div class="ttdeci">void IsolatedInitialize(const NameValuePairs &amp;parameters)</div><div class="ttdoc">Initialize or reinitialize this object, without signal propagation. </div><div class="ttdef"><b>Definition:</b> <a href="filters_8cpp_source.html#l00861">filters.cpp:861</a></div></div>
<div class="ttc" id="class_name_value_pairs_html"><div class="ttname"><a href="class_name_value_pairs.html">NameValuePairs</a></div><div class="ttdoc">Interface for retrieving values given their names. </div><div class="ttdef"><b>Definition:</b> <a href="cryptlib_8h_source.html#l00290">cryptlib.h:290</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Sep 16 2018 07:57:51 for Crypto++ by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
</body>
</html>