<!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++  <span id="projectnumber">7.0</span> </div> <div id="projectbrief">Free C++ class library of cryptographic 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&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> <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> </div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="preprocessor">#include "<a class="code" href="pch_8h.html">pch.h</a>"</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#include "<a class="code" href="config_8h.html">config.h</a>"</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#if CRYPTOPP_MSC_VERSION</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor"># pragma warning(disable: 4100 4189 4355)</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> </div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"># pragma GCC diagnostic ignored "-Wunused-value"</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#ifndef CRYPTOPP_IMPORTS</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "<a class="code" href="filters_8h.html">filters.h</a>"</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "mqueue.h"</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "fltrimpl.h"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "<a class="code" href="argnames_8h.html">argnames.h</a>"</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "<a class="code" href="smartptr_8h.html">smartptr.h</a>"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "<a class="code" href="stdcpp_8h.html">stdcpp.h</a>"</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "<a class="code" href="misc_8h.html">misc.h</a>"</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> 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> </div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="class_filter.html#a3c1c355eb02ae048020785d335bad6b3"> 26</a></span> <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>  : m_attachment(attachment), m_inputPosition(0), m_continueAt(0)</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <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> <span class="keyword"></span>{</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <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> }</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93"> 36</a></span> <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> {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">if</span> (m_attachment.get() == NULLPTR)</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  m_attachment.reset(NewDefaultAttachment());</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">return</span> m_attachment.get();</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="class_filter.html#a049148324c63bda47ac676f64e113b26"> 43</a></span> <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> <span class="keyword"></span>{</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">if</span> (m_attachment.get() == NULLPTR)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  const_cast<Filter *>(<span class="keyword">this</span>)->m_attachment.reset(NewDefaultAttachment());</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">return</span> m_attachment.get();</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="class_filter.html#a93817876b45172108fe0342de6442f75"> 50</a></span> <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> {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  m_attachment.reset(newOut);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <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> {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  filter->m_attachment.reset(m_attachment.release());</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  m_attachment.reset(filter);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="class_filter.html#a9cde2dec371b3074cb4ed92d57ef1f24"> 61</a></span> <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> &target, lword &begin, lword end, <span class="keyword">const</span> std::string &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> <span class="keyword"></span>{</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">return</span> <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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> }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="class_filter.html#ab24c6c52bb6185c25ee6efcced36dbd0"> 66</a></span> <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> &target, lword &transferBytes, <span class="keyword">const</span> std::string &channel, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">return</span> <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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> }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="class_filter.html#a0c011bdc71755b373292e7a722e9e332"> 71</a></span> <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> &parameters, <span class="keywordtype">int</span> propagation)</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  m_inputPosition = m_continueAt = 0;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <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>  PropagateInitialize(parameters, propagation);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="class_filter.html#ad845deb5113d2bd04d109c05abfd3098"> 78</a></span> <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> {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">switch</span> (m_continueAt)</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">case</span> 0:</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <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>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="comment">// fall through</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">if</span> (OutputFlush(1, hardFlush, propagation, blocking))</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="comment">// fall through</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">default</span>: ;;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="class_filter.html#aa42c62587dda61266ac8195d9c9edb47"> 95</a></span> <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> {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">switch</span> (m_continueAt)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">case</span> 0:</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <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>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="comment">// fall through</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">if</span> (ShouldPropagateMessageSeriesEnd() && OutputMessageSeriesEnd(1, propagation, blocking))</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="comment">// fall through</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">default</span>: ;;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">void</span> Filter::PropagateInitialize(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &parameters, <span class="keywordtype">int</span> propagation)</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">if</span> (propagation)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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> }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <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 &channel)</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordflow">if</span> (messageEnd)</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  messageEnd--;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordtype">size_t</span> result = <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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>  m_continueAt = result ? outputSite : 0;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <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 &channel)</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">if</span> (messageEnd)</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  messageEnd--;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordtype">size_t</span> result = <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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>  m_continueAt = result ? outputSite : 0;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <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 &channel)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">if</span> (propagation && <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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>  {</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  m_continueAt = outputSite;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  m_continueAt = 0;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <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 &channel)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">if</span> (propagation && <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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>  {</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  m_continueAt = outputSite;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  m_continueAt = 0;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment">// *************************************************************</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="class_meter_filter.html#a59c4b05b453ad56ed42b6951ab986db0"> 160</a></span> <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> {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  m_currentMessageBytes = m_totalBytes = m_currentSeriesMessages = m_totalMessages = m_totalMessageSeries = 0;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  m_rangesToSkip.clear();</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="class_meter_filter.html#a58898a4bba38196c8432b8b5d324b671"> 166</a></span> <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> {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  MessageRange r = {message, position, size};</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  m_rangesToSkip.push_back(r);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">if</span> (sortNow)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  std::sort(m_rangesToSkip.begin(), m_rangesToSkip.end());</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <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> {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">if</span> (!m_transparent)</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordtype">size_t</span> t;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  FILTER_BEGIN;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  m_begin = begin;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  m_length = length;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">while</span> (m_length > 0 || messageEnd)</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">if</span> (m_length > 0 && !m_rangesToSkip.empty() && m_rangesToSkip.front().message == m_totalMessages && m_currentMessageBytes + m_length > m_rangesToSkip.front().position)</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  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> </div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(t < m_length);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  m_begin += t;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  m_length -= t;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  m_currentMessageBytes += t;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  m_totalBytes += t;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">if</span> (m_currentMessageBytes + m_length < m_rangesToSkip.front().position + m_rangesToSkip.front().size)</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  t = m_length;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  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>  <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(t <= m_length);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  m_rangesToSkip.pop_front();</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  m_begin += t;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  m_length -= t;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  m_currentMessageBytes += t;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  m_totalBytes += t;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  FILTER_OUTPUT_MAYBE_MODIFIABLE(2, m_begin, m_length, messageEnd, modifiable);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  m_currentMessageBytes += m_length;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  m_totalBytes += m_length;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  m_length = 0;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">if</span> (messageEnd)</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  m_currentMessageBytes = 0;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  m_currentSeriesMessages++;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  m_totalMessages++;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  messageEnd = <span class="keyword">false</span>;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  }</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  }</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  FILTER_END_NO_MESSAGE_END;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="class_meter_filter.html#a7d59d4e7f674b5ba6a54e8e241cf9148"> 232</a></span> <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> {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">return</span> PutMaybeModifiable(const_cast<byte *>(begin), length, messageEnd, blocking, <span class="keyword">false</span>);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div><div class="line"><a name="l00237"></a><span class="lineno"><a class="line" href="class_meter_filter.html#a03c8af7442aa844e83e4c45397373f14"> 237</a></span> <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> {</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <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> }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div><div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="class_meter_filter.html#aa3b923710e4ed83fb4980cb53504a521"> 242</a></span> <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> {</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  CRYPTOPP_UNUSED(blocking);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  m_currentMessageBytes = 0;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  m_currentSeriesMessages = 0;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  m_totalMessageSeries++;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> }</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="comment">// *************************************************************</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <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> {</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  m_buffer.New(blockSize * maxBlocks);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  m_blockSize = blockSize;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  m_maxBlocks = maxBlocks;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  m_size = 0;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  m_begin = m_buffer;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> byte *FilterWithBufferedInput::BlockQueue::GetBlock()</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> {</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">if</span> (m_size >= m_blockSize)</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  byte *ptr = m_begin;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <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>  m_begin = m_buffer;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  m_size -= m_blockSize;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordflow">return</span> ptr;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  }</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">return</span> NULLPTR;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> }</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> byte *FilterWithBufferedInput::BlockQueue::GetContigousBlocks(<span class="keywordtype">size_t</span> &numberOfBytes)</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> {</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  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>  byte *ptr = m_begin;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  m_begin += numberOfBytes;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  m_size -= numberOfBytes;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <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>  m_begin = m_buffer;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">return</span> ptr;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> }</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="keywordtype">size_t</span> FilterWithBufferedInput::BlockQueue::GetAll(byte *outString)</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> {</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="comment">// Avoid passing NULL pointer to memcpy</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <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> </div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordtype">size_t</span> size = m_size;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keywordtype">size_t</span> numberOfBytes = m_maxBlocks*m_blockSize;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keyword">const</span> byte *ptr = GetContigousBlocks(numberOfBytes);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  memcpy(outString, ptr, numberOfBytes);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  memcpy(outString+numberOfBytes, m_begin, m_size);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  m_size = 0;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">return</span> size;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <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> {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="comment">// Avoid passing NULL pointer to memcpy</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <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> </div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(m_size + length <= m_buffer.size());</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  byte *end = (m_size < 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>  <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>  memcpy(end, inString, len);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keywordflow">if</span> (len < length)</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  memcpy(m_buffer, inString+len, length-len);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  m_size += length;</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> }</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </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> <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>  : <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> {</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> }</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </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> <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>  : <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> {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">if</span> (m_firstSize == <a class="code" href="misc_8h.html#a3c75bb398badb69c7577b21486f9963f">SIZE_MAX</a> || m_blockSize < 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>  <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"FilterWithBufferedInput: invalid buffer size"</span>);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  m_queue.ResetQueue(1, m_firstSize);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span> }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </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> <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> &parameters)</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> {</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  InitializeDerivedAndReturnNewSizes(parameters, m_firstSize, m_blockSize, m_lastSize);</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">if</span> (m_firstSize == <a class="code" href="misc_8h.html#a3c75bb398badb69c7577b21486f9963f">SIZE_MAX</a> || m_blockSize < 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>  <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"FilterWithBufferedInput: invalid buffer size"</span>);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  m_queue.ResetQueue(1, m_firstSize);</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  m_firstInputDone = <span class="keyword">false</span>;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> }</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </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> <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> {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keywordflow">if</span> (!blocking)</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">throw</span> <a class="code" href="struct_buffered_transformation_1_1_blocking_input_only.html">BlockingInputOnly</a>(<span class="stringliteral">"FilterWithBufferedInput"</span>);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keywordflow">if</span> (hardFlush)</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <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>  FlushDerived();</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> }</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <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> {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordflow">if</span> (!blocking)</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keywordflow">throw</span> BlockingInputOnly(<span class="stringliteral">"FilterWithBufferedInput"</span>);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordflow">if</span> (length != 0)</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  {</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordtype">size_t</span> newLength = m_queue.CurrentSize() + length;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keywordflow">if</span> (!m_firstInputDone && newLength >= m_firstSize)</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  {</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <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>  m_queue.Put(inString, len);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  FirstPut(m_queue.GetContigousBlocks(m_firstSize));</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <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>  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> </div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  inString += len;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  newLength -= m_firstSize;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  m_firstInputDone = <span class="keyword">true</span>;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  }</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keywordflow">if</span> (m_firstInputDone)</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  {</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keywordflow">if</span> (m_blockSize == 1)</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  {</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordflow">while</span> (newLength > m_lastSize && m_queue.CurrentSize() > 0)</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  {</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="keywordtype">size_t</span> len = newLength - m_lastSize;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  byte *ptr = m_queue.GetContigousBlocks(len);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  NextPutModifiable(ptr, len);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  newLength -= len;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">if</span> (newLength > m_lastSize)</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keywordtype">size_t</span> len = newLength - m_lastSize;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  NextPutMaybeModifiable(inString, len, modifiable);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  inString += len;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  newLength -= len;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  }</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  }</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keywordflow">while</span> (newLength >= m_blockSize + m_lastSize && m_queue.CurrentSize() >= m_blockSize)</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  {</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  NextPutModifiable(m_queue.GetBlock(), m_blockSize);</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  newLength -= m_blockSize;</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  }</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span> </div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordflow">if</span> (newLength >= m_blockSize + m_lastSize && m_queue.CurrentSize() > 0)</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  {</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(m_queue.CurrentSize() < m_blockSize);</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <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>  m_queue.Put(inString, len);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  inString += len;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  NextPutModifiable(m_queue.GetBlock(), m_blockSize);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  newLength -= m_blockSize;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  }</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keywordflow">if</span> (newLength >= m_blockSize + m_lastSize)</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  {</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <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>  NextPutMaybeModifiable(inString, len, modifiable);</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  inString += len;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  newLength -= len;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  }</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  }</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  }</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span> </div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  m_queue.Put(inString, newLength - m_queue.CurrentSize());</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keywordflow">if</span> (messageEnd)</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  {</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">if</span> (!m_firstInputDone && m_firstSize==0)</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  FirstPut(NULLPTR);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <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>  m_queue.GetAll(temp);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  LastPut(temp, temp.size());</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> </div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  m_firstInputDone = <span class="keyword">false</span>;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  m_queue.ResetQueue(1, m_firstSize);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="comment">// Cast to void to suppress Coverity finding</span></div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  (void)Output(1, NULLPTR, 0, messageEnd, blocking);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span> }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span> </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> <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> {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="keywordflow">if</span> (!m_firstInputDone)</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span> </div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="keywordflow">if</span> (m_blockSize > 1)</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  {</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">while</span> (m_queue.CurrentSize() >= m_blockSize)</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  NextPutModifiable(m_queue.GetBlock(), m_blockSize);</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  }</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  {</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="keywordtype">size_t</span> len;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">while</span> ((len = m_queue.CurrentSize()) > 0)</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  NextPutModifiable(m_queue.GetContigousBlocks(len), len);</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span> }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <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> {</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(m_blockSize > 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>  <span class="keywordflow">while</span> (length > 0)</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  {</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(length >= m_blockSize);</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  NextPutSingle(inString);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  inString += m_blockSize;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  length -= m_blockSize;</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  }</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span> }</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="comment">// *************************************************************</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div><div class="line"><a name="l00473"></a><span class="lineno"><a class="line" href="class_redirector.html#af5fe25d9b6e17ec878e8f2b188702736"> 473</a></span> <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> &parameters, <span class="keywordtype">int</span> propagation)</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span> {</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  m_target = parameters.<a class="code" href="class_name_value_pairs.html#a4daf1ef67b547c6be96188a43e5ec05e">GetValueWithDefault</a>(<span class="stringliteral">"RedirectionTargetPointer"</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>  m_behavior = parameters.<a class="code" href="class_name_value_pairs.html#a7ddb654b7afcd1a04422a7b4b01366d9">GetIntValueWithDefault</a>(<span class="stringliteral">"RedirectionBehavior"</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> </div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="keywordflow">if</span> (m_target && GetPassSignals())</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  m_target-><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> }</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span> </div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="comment">// *************************************************************</span></div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span> </div><div class="line"><a name="l00484"></a><span class="lineno"><a class="line" href="class_proxy_filter.html#a1eb33984fa222e94a7048455fc17ab20"> 484</a></span> <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>  : <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> {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keywordflow">if</span> (m_filter.get())</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  m_filter-><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> }</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span> </div><div class="line"><a name="l00491"></a><span class="lineno"><a class="line" href="class_proxy_filter.html#ae5d15b0c5bcc601a58dde22e01ce9b79"> 491</a></span> <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> {</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="keywordflow">return</span> m_filter.get() ? m_filter-><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> }</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> </div><div class="line"><a name="l00496"></a><span class="lineno"><a class="line" href="class_proxy_filter.html#a98a1d161913c42feb64951c396f0f3e0"> 496</a></span> <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> {</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  m_filter.reset(filter);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="keywordflow">if</span> (filter)</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  {</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <a class="code" href="class_output_proxy.html">OutputProxy</a> *proxy;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <a class="code" href="classmember__ptr.html">member_ptr<OutputProxy></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>  m_filter-><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>  m_filter-><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>  }</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span> }</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span> </div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <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> {</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keywordflow">if</span> (m_filter.get())</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  m_filter-><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> }</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span> </div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <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> {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keywordflow">if</span> (m_filter.get())</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  m_filter-><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> }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="comment">// *************************************************************</span></div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span> </div><div class="line"><a name="l00522"></a><span class="lineno"><a class="line" href="class_random_number_sink.html#ad9eb1681d33e03ebf6ef43dc70299c9e"> 522</a></span> <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> &parameters)</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span> {</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  parameters.<a class="code" href="class_name_value_pairs.html#af28f6e7abf98606d8146bfda271e99db">GetRequiredParameter</a>(<span class="stringliteral">"RandomNumberSink"</span>, <span class="stringliteral">"RandomNumberGeneratorPointer"</span>, m_rng);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span> }</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span> </div><div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="class_random_number_sink.html#aed57770519427841e3aac3abc251bc64"> 527</a></span> <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> {</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  CRYPTOPP_UNUSED(messageEnd); CRYPTOPP_UNUSED(blocking);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  m_rng-><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>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span> }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span> </div><div class="line"><a name="l00534"></a><span class="lineno"><a class="line" href="class_array_sink.html#ad3459c605b5eb52fa24efcb4dc35d29d"> 534</a></span> <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> {</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  CRYPTOPP_UNUSED(messageEnd); CRYPTOPP_UNUSED(blocking);</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <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>  <span class="comment">// Valgrind finding on overlapping buffers.</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keywordtype">size_t</span> copied = 0;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <span class="keywordflow">if</span> (m_buf && begin)</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  {</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  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>  memmove(m_buf+m_total, begin, copied);</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  }</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  m_total += copied;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">return</span> length - copied;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> }</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div><div class="line"><a name="l00550"></a><span class="lineno"><a class="line" href="class_array_sink.html#a535e57a894542c088131bc84955c475b"> 550</a></span> byte * <a class="code" href="class_array_sink.html#a535e57a894542c088131bc84955c475b">ArraySink::CreatePutSpace</a>(<span class="keywordtype">size_t</span> &size)</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span> {</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  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>  <span class="keywordflow">return</span> m_buf + m_total;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> </div><div class="line"><a name="l00556"></a><span class="lineno"><a class="line" href="class_array_sink.html#a0b677032fc5455f0ad134d4271ac40c3"> 556</a></span> <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> &parameters)</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span> {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <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>  <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>  <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"ArraySink: missing OutputBuffer argument"</span>);</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  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>  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> }</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span> </div><div class="line"><a name="l00565"></a><span class="lineno"><a class="line" href="class_array_xor_sink.html#a20637eac89903059461b27d621dcc339"> 565</a></span> <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> {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  CRYPTOPP_UNUSED(messageEnd); CRYPTOPP_UNUSED(blocking);</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span> </div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <span class="comment">// Avoid passing NULL pointer to xorbuf</span></div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordtype">size_t</span> copied = 0;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keywordflow">if</span> (m_buf && begin)</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  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>  <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>  }</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  m_total += copied;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <span class="keywordflow">return</span> length - copied;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span> }</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="comment">// *************************************************************</span></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span> </div><div class="line"><a name="l00582"></a><span class="lineno"><a class="line" href="class_stream_transformation_filter.html#a44233434772a4b8eed494dc2dee67ae5"> 582</a></span> <a class="code" href="class_stream_transformation_filter.html#a44233434772a4b8eed494dc2dee67ae5">StreamTransformationFilter::StreamTransformationFilter</a>(<a class="code" href="class_stream_transformation.html">StreamTransformation</a> &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>  : <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> {</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(c.MinLastBlockSize() == 0 || c.MinLastBlockSize() > c.MandatoryBlockSize());</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span> </div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> authenticatedFilter = <span class="keyword">dynamic_cast<</span><a class="code" href="class_authenticated_symmetric_cipher.html">AuthenticatedSymmetricCipher</a> *<span class="keyword">></span>(&c) != NULLPTR;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="keywordflow">if</span> (authenticatedFilter)</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"StreamTransformationFilter: please use AuthenticatedEncryptionFilter and AuthenticatedDecryptionFilter for AuthenticatedSymmetricCipher"</span>);</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span> </div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="comment">// InitializeDerivedAndReturnNewSizes may override some of these</span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  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>  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>  m_isSpecial = m_cipher.<a class="code" href="class_stream_transformation.html#a62db1393d64069b282e3d455b38cd0e5">IsLastBlockSpecial</a>() && m_mandatoryBlockSize > 1;</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  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> </div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <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> }</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span> </div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <a class="code" href="class_stream_transformation_filter.html#a44233434772a4b8eed494dc2dee67ae5">StreamTransformationFilter::StreamTransformationFilter</a>(<a class="code" href="class_stream_transformation.html">StreamTransformation</a> &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>  : <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> {</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> authenticatedFilter = <span class="keyword">dynamic_cast<</span><a class="code" href="class_authenticated_symmetric_cipher.html">AuthenticatedSymmetricCipher</a> *<span class="keyword">></span>(&c) != NULLPTR;</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <span class="keywordflow">if</span> (!authenticatedFilter)</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(c.MinLastBlockSize() == 0 || c.MinLastBlockSize() > c.MandatoryBlockSize());</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  }</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span> </div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="keywordflow">if</span> (authenticatedFilter && !authenticated)</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"StreamTransformationFilter: please use AuthenticatedEncryptionFilter and AuthenticatedDecryptionFilter for AuthenticatedSymmetricCipher"</span>);</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span> </div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="comment">// InitializeDerivedAndReturnNewSizes may override some of these</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  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>  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>  m_isSpecial = m_cipher.<a class="code" href="class_stream_transformation.html#a62db1393d64069b282e3d455b38cd0e5">IsLastBlockSpecial</a>() && m_mandatoryBlockSize > 1;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  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> </div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <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> }</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> </div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="keywordtype">size_t</span> StreamTransformationFilter::LastBlockSize(<a class="code" href="class_stream_transformation.html">StreamTransformation</a> &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> {</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <span class="keywordflow">if</span> (c.MinLastBlockSize() > 0)</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="keywordflow">return</span> c.MinLastBlockSize();</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c.MandatoryBlockSize() > 1 && !c.IsForwardTransformation() && padding != <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979ad929ced62ab4871b2d9b87cab0b47887">NO_PADDING</a> && 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>  <span class="keywordflow">return</span> c.MandatoryBlockSize();</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span> </div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span> }</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span> </div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="keywordtype">void</span> StreamTransformationFilter::InitializeDerivedAndReturnNewSizes(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &parameters, <span class="keywordtype">size_t</span> &firstSize, <span class="keywordtype">size_t</span> &blockSize, <span class="keywordtype">size_t</span> &lastSize)</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span> {</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <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>  <span class="keywordtype">bool</span> isBlockCipher = (m_mandatoryBlockSize > 1 && 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> </div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <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>  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>  <span class="keywordflow">else</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  m_padding = padding;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span> </div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <span class="keywordflow">if</span> (!isBlockCipher)</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  {</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <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>  <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"StreamTransformationFilter: PKCS_PADDING cannot be used with "</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>  <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>  <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"StreamTransformationFilter: W3C_PADDING cannot be used with "</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>  <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>  <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"StreamTransformationFilter: ONE_AND_ZEROS_PADDING cannot be used with "</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>  }</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span> </div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  firstSize = 0;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  blockSize = m_mandatoryBlockSize;</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  lastSize = LastBlockSize(m_cipher, m_padding);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span> }</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span> </div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <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> {</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  CRYPTOPP_UNUSED(inString);</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  m_optimalBufferSize = STDMAX<unsigned int>(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> }</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span> </div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <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> {</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <span class="keywordflow">if</span> (!length)</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  {<span class="keywordflow">return</span>;}</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span> </div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <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>  <span class="keywordflow">do</span></div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  {</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keywordtype">size_t</span> len = m_optimalBufferSize;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  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>  <span class="keywordflow">if</span> (len < length)</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  {</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <span class="keywordflow">if</span> (len == m_optimalBufferSize)</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  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>  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>  }</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  len = length;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  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>  <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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>  inString += len;</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  length -= len;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  }</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <span class="keywordflow">while</span> (length > 0);</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span> }</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span> </div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <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> {</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  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>  <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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> }</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span> </div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <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> {</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  byte *space = NULLPTR;</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span> </div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="preprocessor">#if 1</span></div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <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>  <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>  <span class="comment">// last block size can be 0. However, "last block = 0" is not the 0 predacted in the</span></div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="comment">// original code. In the orginal code 0 means "nothing special" so DEFAULT_PADDING is</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <span class="comment">// applied. OCB'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>  <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>  <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>  <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>  <span class="comment">// cover the OCB case either because we can't stream OCB. It needs full block sizes. In</span></div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <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>  <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>  <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>  <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>  <span class="comment">// from a simple bool to something that conveys more information, like "last block</span></div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  <span class="comment">// no padding" or "custom padding applied by cipher".</span></div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <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>  <span class="comment">// calculates the checksum on the cipher text at the same time, so we don't need the</span></div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <span class="comment">// disjoint behavior of calling "EncryptBlock" followed by a separate "AuthenticateBlock".</span></div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  <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>  <span class="keywordflow">if</span> (m_isSpecial)</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  {</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  <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>  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> </div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  length -= leftOver;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <span class="keywordflow">if</span> (length)</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  {</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <span class="comment">// Process full blocks</span></div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  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>  <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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>  inString += length;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  }</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span> </div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <span class="keywordflow">if</span> (leftOver)</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  {</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <span class="comment">// Process final partial block</span></div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  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>  <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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>  }</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  {</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <span class="comment">// Process final empty block</span></div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  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>  <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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>  }</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span> </div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  }</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span> </div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <span class="keywordflow">switch</span> (m_padding)</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  {</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <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>  <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>  <span class="keywordflow">if</span> (length > 0)</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  {</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  <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>  <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> </div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  <span class="keywordflow">if</span> (isForwardTransformation && m_padding == <a class="code" href="struct_block_padding_scheme_def.html#abea06c498771e8f0ad0fbbc19416a979ae6ae59c8e974534a292a2f0b11131f08">ZEROS_PADDING</a> && (minLastBlockSize == 0 || length < minLastBlockSize))</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  {</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <span class="comment">// do padding</span></div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  <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>  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>  <span class="keywordflow">if</span> (inString) {memcpy(space, inString, length);}</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  memset(space + length, 0, blockSize - length);</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  <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>  <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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>  }</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  {</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  <span class="keywordflow">if</span> (minLastBlockSize == 0)</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  {</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  <span class="keywordflow">if</span> (isForwardTransformation)</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  <span class="keywordflow">throw</span> <a class="code" href="class_invalid_data_format.html">InvalidDataFormat</a>(<span class="stringliteral">"StreamTransformationFilter: plaintext length is not a multiple of block size and NO_PADDING is specified"</span>);</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="keywordflow">throw</span> <a class="code" href="class_invalid_ciphertext.html">InvalidCiphertext</a>(<span class="stringliteral">"StreamTransformationFilter: ciphertext length is not a multiple of block size"</span>);</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  }</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span> </div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  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>  <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>  <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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>  }</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  }</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span> </div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  <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>  <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>  <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>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> s;</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  s = m_mandatoryBlockSize;</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(s > 1);</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  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>  <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>  {</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(length < s);</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="keywordflow">if</span> (inString) {memcpy(space, inString, length);}</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  <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>  {</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(s < 256);</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  byte pad = <span class="keyword">static_cast<</span>byte<span class="keyword">></span>(s-length);</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  memset(space+length, pad, s-length);</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  }</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <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>  {</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <a class="code" href="trap_8h.html#adf3b392588bc94cbeae9f415a78c7b95">CRYPTOPP_ASSERT</a>(s < 256);</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  memset(space+length, 0, s-length-1);</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  space[s-1] = <span class="keyword">static_cast<</span>byte<span class="keyword">></span>(s-length);</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  }</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  {</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  space[length] = 0x80;</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  memset(space+length+1, 0, s-length-1);</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  }</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  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>  <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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>  }</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  {</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <span class="keywordflow">if</span> (length != s)</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="keywordflow">throw</span> <a class="code" href="class_invalid_ciphertext.html">InvalidCiphertext</a>(<span class="stringliteral">"StreamTransformationFilter: ciphertext length is not a multiple of block size"</span>);</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  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>  <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>  {</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  byte pad = space[s-1];</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <span class="keywordflow">if</span> (pad < 1 || pad > 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>  <span class="keywordflow">throw</span> <a class="code" href="class_invalid_ciphertext.html">InvalidCiphertext</a>(<span class="stringliteral">"StreamTransformationFilter: invalid PKCS #7 block padding found"</span>);</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  length = s-pad;</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  }</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  <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>  {</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  byte pad = space[s - 1];</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <span class="keywordflow">if</span> (pad < 1 || pad > s)</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="keywordflow">throw</span> <a class="code" href="class_invalid_ciphertext.html">InvalidCiphertext</a>(<span class="stringliteral">"StreamTransformationFilter: invalid W3C block padding found"</span>);</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  length = s - pad;</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  }</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  {</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  <span class="keywordflow">while</span> (length > 1 && space[length-1] == 0)</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  --length;</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  <span class="keywordflow">if</span> (space[--length] != 0x80)</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  <span class="keywordflow">throw</span> <a class="code" href="class_invalid_ciphertext.html">InvalidCiphertext</a>(<span class="stringliteral">"StreamTransformationFilter: invalid ones-and-zeros padding found"</span>);</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  }</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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>  }</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span> </div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <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>  }</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span> }</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span> </div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span> <span class="comment">// *************************************************************</span></div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span> </div><div class="line"><a name="l00853"></a><span class="lineno"><a class="line" href="class_hash_filter.html#a58b9949a468e798cc97d7b4c59a9d8c2"> 853</a></span> <a class="code" href="class_hash_filter.html#a58b9949a468e798cc97d7b4c59a9d8c2">HashFilter::HashFilter</a>(<a class="code" href="class_hash_transformation.html">HashTransformation</a> &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 &messagePutChannel, <span class="keyword">const</span> std::string &hashPutChannel)</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  : 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>  , m_messagePutChannel(messagePutChannel), m_hashPutChannel(hashPutChannel)</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span> {</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  m_digestSize = truncatedDigestSize < 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>  <a class="code" href="class_filter.html#a93817876b45172108fe0342de6442f75">Detach</a>(attachment);</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span> }</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span> </div><div class="line"><a name="l00861"></a><span class="lineno"><a class="line" href="class_hash_filter.html#a950c5cc22d2aa101e731401b10ff2be4"> 861</a></span> <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> &parameters)</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span> {</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  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>  <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>  m_digestSize = s < 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> }</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span> </div><div class="line"><a name="l00868"></a><span class="lineno"><a class="line" href="class_hash_filter.html#a7dde1304b794c488f43cb60f8bbf7b66"> 868</a></span> <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> {</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  FILTER_BEGIN;</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  <span class="keywordflow">if</span> (m_putMessage)</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  FILTER_OUTPUT3(1, 0, inString, length, 0, m_messagePutChannel);</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  <span class="keywordflow">if</span> (inString && length)</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  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>  <span class="keywordflow">if</span> (messageEnd)</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  {</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  {</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  <span class="keywordtype">size_t</span> size;</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  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>  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>  }</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  FILTER_OUTPUT3(2, 0, m_space, m_digestSize, messageEnd, m_hashPutChannel);</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  }</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  FILTER_END_NO_MESSAGE_END;</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span> }</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span> </div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span> <span class="comment">// *************************************************************</span></div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span> </div><div class="line"><a name="l00889"></a><span class="lineno"><a class="line" href="class_hash_verification_filter.html#a27983e6af704b2f42ec10c76cc70efe0"> 889</a></span> <a class="code" href="class_hash_verification_filter.html#a27983e6af704b2f42ec10c76cc70efe0">HashVerificationFilter::HashVerificationFilter</a>(<a class="code" href="class_hash_transformation.html">HashTransformation</a> &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>  : <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>  , 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> {</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  <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> }</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span> </div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="keywordtype">void</span> HashVerificationFilter::InitializeDerivedAndReturnNewSizes(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &parameters, <span class="keywordtype">size_t</span> &firstSize, <span class="keywordtype">size_t</span> &blockSize, <span class="keywordtype">size_t</span> &lastSize)</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span> {</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  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>  <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>  m_digestSize = s < 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>  m_verified = <span class="keyword">false</span>;</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  firstSize = m_flags & <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>  blockSize = 1;</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  lastSize = m_flags & <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> }</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span> </div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <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> {</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <span class="keywordflow">if</span> (m_flags & <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>  {</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  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>  <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>  <span class="keywordflow">if</span> (m_flags & <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>  <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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>  }</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span> }</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span> </div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <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> {</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  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>  <span class="keywordflow">if</span> (m_flags & <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>  <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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> }</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span> </div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span> <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> {</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  <span class="keywordflow">if</span> (m_flags & <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>  {</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  <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>  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>  }</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  {</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  m_verified = (length==m_digestSize && 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>  <span class="keywordflow">if</span> (m_flags & <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>  <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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>  }</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span> </div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  <span class="keywordflow">if</span> (m_flags & <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>  <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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> </div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  <span class="keywordflow">if</span> ((m_flags & <a class="code" href="class_hash_verification_filter.html#a4e171785f3f9b00d0a10f4c2afa1cc70a56c0daa4f424032c82a53d8dcdf78c55">THROW_EXCEPTION</a>) && !m_verified)</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  <span class="keywordflow">throw</span> HashVerificationFailed();</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span> }</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span> </div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span> <span class="comment">// *************************************************************</span></div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span> </div><div class="line"><a name="l00948"></a><span class="lineno"><a class="line" href="class_authenticated_encryption_filter.html#ab50017b68574475d37fc726717fde546"> 948</a></span> <a class="code" href="class_authenticated_encryption_filter.html#ab50017b68574475d37fc726717fde546">AuthenticatedEncryptionFilter::AuthenticatedEncryptionFilter</a>(<a class="code" href="class_authenticated_symmetric_cipher.html">AuthenticatedSymmetricCipher</a> &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>  <span class="keywordtype">bool</span> putAAD, <span class="keywordtype">int</span> truncatedDigestSize, <span class="keyword">const</span> std::string &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>  : <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>  , 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> {</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  <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> }</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span> </div><div class="line"><a name="l00956"></a><span class="lineno"><a class="line" href="class_authenticated_encryption_filter.html#aad275712b531d24e3ac4d332d46f1dd4"> 956</a></span> <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> &parameters)</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span> {</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  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>  <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> }</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span> </div><div class="line"><a name="l00962"></a><span class="lineno"><a class="line" href="class_authenticated_encryption_filter.html#a7e50639e227b5a0f6f184a69e6d48642"> 962</a></span> byte * <a class="code" href="class_authenticated_encryption_filter.html#a7e50639e227b5a0f6f184a69e6d48642">AuthenticatedEncryptionFilter::ChannelCreatePutSpace</a>(<span class="keyword">const</span> std::string &channel, <span class="keywordtype">size_t</span> &size)</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span> {</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  <span class="keywordflow">if</span> (channel.empty())</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  <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> </div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  <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>  <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> </div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  <span class="keywordflow">throw</span> <a class="code" href="struct_buffered_transformation_1_1_invalid_channel_name.html">InvalidChannelName</a>(<span class="stringliteral">"AuthenticatedEncryptionFilter"</span>, channel);</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span> }</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span> </div><div class="line"><a name="l00973"></a><span class="lineno"><a class="line" href="class_authenticated_encryption_filter.html#a061422f8897f1a9545ba47f7ff0d8d5b"> 973</a></span> <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 &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> {</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  <span class="keywordflow">if</span> (channel.empty())</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  <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> </div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  <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>  <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> </div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  <span class="keywordflow">throw</span> <a class="code" href="struct_buffered_transformation_1_1_invalid_channel_name.html">InvalidChannelName</a>(<span class="stringliteral">"AuthenticatedEncryptionFilter"</span>, channel);</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span> }</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span> </div><div class="line"><a name="l00984"></a><span class="lineno"><a class="line" href="class_authenticated_encryption_filter.html#a372eb12964b7974cf58154589ede32ad"> 984</a></span> <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> {</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  StreamTransformationFilter::LastPut(inString, length);</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  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> }</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span> </div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span> <span class="comment">// *************************************************************</span></div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span> </div><div class="line"><a name="l00992"></a><span class="lineno"><a class="line" href="class_authenticated_decryption_filter.html#a8749a671716e49da0ac686df2d38df1e"> 992</a></span> <a class="code" href="class_authenticated_decryption_filter.html#a8749a671716e49da0ac686df2d38df1e">AuthenticatedDecryptionFilter::AuthenticatedDecryptionFilter</a>(<a class="code" href="class_authenticated_symmetric_cipher.html">AuthenticatedSymmetricCipher</a> &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>  : <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>  , 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>  , 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> {</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  <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>  <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> }</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> </div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <span class="keywordtype">void</span> AuthenticatedDecryptionFilter::InitializeDerivedAndReturnNewSizes(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &parameters, <span class="keywordtype">size_t</span> &firstSize, <span class="keywordtype">size_t</span> &blockSize, <span class="keywordtype">size_t</span> &lastSize)</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> {</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  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> </div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  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>  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> </div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  firstSize = m_hashVerifier.m_firstSize;</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  blockSize = 1;</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  lastSize = m_hashVerifier.m_lastSize;</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> }</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> </div><div class="line"><a name="l01013"></a><span class="lineno"><a class="line" href="class_authenticated_decryption_filter.html#af4e30b147daa507238e9bee3715a3a23"> 1013</a></span> byte * <a class="code" href="class_authenticated_decryption_filter.html#af4e30b147daa507238e9bee3715a3a23">AuthenticatedDecryptionFilter::ChannelCreatePutSpace</a>(<span class="keyword">const</span> std::string &channel, <span class="keywordtype">size_t</span> &size)</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> {</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>  <span class="keywordflow">if</span> (channel.empty())</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  <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> </div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  <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>  <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> </div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  <span class="keywordflow">throw</span> <a class="code" href="struct_buffered_transformation_1_1_invalid_channel_name.html">InvalidChannelName</a>(<span class="stringliteral">"AuthenticatedDecryptionFilter"</span>, channel);</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> }</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> </div><div class="line"><a name="l01024"></a><span class="lineno"><a class="line" href="class_authenticated_decryption_filter.html#af29b21590d82a985e63540276b0fde75"> 1024</a></span> <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 &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> {</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  <span class="keywordflow">if</span> (channel.empty())</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  {</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  <span class="keywordflow">if</span> (m_lastSize > 0)</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  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>  <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>  }</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> </div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  <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>  <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> </div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  <span class="keywordflow">throw</span> <a class="code" href="struct_buffered_transformation_1_1_invalid_channel_name.html">InvalidChannelName</a>(<span class="stringliteral">"AuthenticatedDecryptionFilter"</span>, channel);</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> }</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> </div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> <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> {</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  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> }</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> </div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> <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> {</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  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> }</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> </div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> <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> {</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  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>  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> }</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> </div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="comment">// *************************************************************</span></div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> </div><div class="line"><a name="l01057"></a><span class="lineno"><a class="line" href="class_signer_filter.html#adf4aaa798c16e2ee90bbd39b876df717"> 1057</a></span> <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> &parameters)</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> {</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  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>  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> }</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> </div><div class="line"><a name="l01063"></a><span class="lineno"><a class="line" href="class_signer_filter.html#acfba1ed693cebff62db4d2bde7c011e5"> 1063</a></span> <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> {</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  FILTER_BEGIN;</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  m_messageAccumulator-><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>  <span class="keywordflow">if</span> (m_putMessage)</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  FILTER_OUTPUT(1, inString, length, 0);</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  <span class="keywordflow">if</span> (messageEnd)</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  {</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  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>  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>  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>  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>  }</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  FILTER_END_NO_MESSAGE_END;</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> }</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> </div><div class="line"><a name="l01079"></a><span class="lineno"><a class="line" href="class_signature_verification_filter.html#a7c6d805105a4c57f0bcb8dc013a723e1"> 1079</a></span> <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> &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>  : <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>  , m_verifier(verifier), m_flags(0), m_verified(0)</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> {</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  <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> }</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> </div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="keywordtype">void</span> SignatureVerificationFilter::InitializeDerivedAndReturnNewSizes(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &parameters, <span class="keywordtype">size_t</span> &firstSize, <span class="keywordtype">size_t</span> &blockSize, <span class="keywordtype">size_t</span> &lastSize)</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> {</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  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>  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>  <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>  <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>  m_verified = <span class="keyword">false</span>;</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  firstSize = m_flags & <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>  blockSize = 1;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  lastSize = m_flags & <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> }</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> </div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <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> {</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  <span class="keywordflow">if</span> (m_flags & <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>  {</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  <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>  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>  <span class="keywordflow">else</span></div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  {</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  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>  <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>  }</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> </div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  <span class="keywordflow">if</span> (m_flags & <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>  <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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>  }</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>  {</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  <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>  }</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> }</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> </div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <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> {</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  m_messageAccumulator-><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>  <span class="keywordflow">if</span> (m_flags & <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>  <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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> }</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> </div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <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> {</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  <span class="keywordflow">if</span> (m_flags & <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>  {</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  <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>  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>  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>  }</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  {</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  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>  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>  <span class="keywordflow">if</span> (m_flags & <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>  <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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>  }</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> </div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  <span class="keywordflow">if</span> (m_flags & <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>  <a class="code" href="class_filter.html#ac8fc888888b2dad88bf64fc703044a93">AttachedTransformation</a>()-><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> </div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <span class="keywordflow">if</span> ((m_flags & <a class="code" href="class_signature_verification_filter.html#a3673220151c47758b53dda37c8210180a2b9d85ccbc2be3ca34f45bf78b948c23">THROW_EXCEPTION</a>) && !m_verified)</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  <span class="keywordflow">throw</span> SignatureVerificationFailed();</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> }</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> </div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="comment">// *************************************************************</span></div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> </div><div class="line"><a name="l01151"></a><span class="lineno"><a class="line" href="class_source.html#a0c40e3e80ff36a6d3ec94e72e00fe6c3"> 1151</a></span> <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> {</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>  <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>  <span class="keywordflow">do</span> {</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>  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>  } <span class="keywordflow">while</span>(messageCount == UINT_MAX);</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> </div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> }</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> </div><div class="line"><a name="l01161"></a><span class="lineno"><a class="line" href="class_store.html#a5f578b4a2da5371a8a4b80a038a2d5ea"> 1161</a></span> <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> {</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  <span class="keywordflow">if</span> (!m_messageEnd && !<a class="code" href="class_buffered_transformation.html#a8c1e2ca57fc06a1f3694d8fe7f8508ff">AnyRetrievable</a>())</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  {</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>  m_messageEnd=<span class="keyword">true</span>;</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>  }</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> }</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> </div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Store::CopyMessagesTo(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &target, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count, <span class="keyword">const</span> std::string &channel)<span class="keyword"> const</span></div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="keyword"></span>{</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  <span class="keywordflow">if</span> (m_messageEnd || count == 0)</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  {</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  <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>  <span class="keywordflow">if</span> (GetAutoSignalPropagation())</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  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>  <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  }</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> }</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> </div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="keywordtype">void</span> StringStore::StoreInitialize(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &parameters)</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> {</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  <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>  <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>  <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"StringStore: missing InputBuffer argument"</span>);</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>  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>  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>  m_count = 0;</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> }</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> </div><div class="line"><a name="l01195"></a><span class="lineno"><a class="line" href="class_string_store.html#acca5c45df0db23ac71fb363d7005743b"> 1195</a></span> <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> &target, lword &transferBytes, <span class="keyword">const</span> std::string &channel, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> {</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>  lword position = 0;</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  <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>  m_count += (size_t)position;</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  transferBytes = position;</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  <span class="keywordflow">return</span> blockedBytes;</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> }</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> </div><div class="line"><a name="l01204"></a><span class="lineno"><a class="line" href="class_string_store.html#a1272eeca9a2496019bb524faa23ac557"> 1204</a></span> <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> &target, lword &begin, lword end, <span class="keyword">const</span> std::string &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> <span class="keyword"></span>{</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>  <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>  <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>  <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>  <span class="keywordflow">if</span> (!blockedBytes)</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>  begin += len;</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>  <span class="keywordflow">return</span> blockedBytes;</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> }</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> </div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> <span class="keywordtype">void</span> RandomNumberStore::StoreInitialize(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &parameters)</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> {</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>  parameters.<a class="code" href="class_name_value_pairs.html#af28f6e7abf98606d8146bfda271e99db">GetRequiredParameter</a>(<span class="stringliteral">"RandomNumberStore"</span>, <span class="stringliteral">"RandomNumberGeneratorPointer"</span>, m_rng);</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>  <span class="keywordtype">int</span> length;</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>  parameters.<a class="code" href="class_name_value_pairs.html#acfb673d912e1bc19386bebba9d58c23f">GetRequiredIntParameter</a>(<span class="stringliteral">"RandomNumberStore"</span>, <span class="stringliteral">"RandomNumberStoreSize"</span>, length);</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>  m_length = length;</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> }</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> </div><div class="line"><a name="l01222"></a><span class="lineno"><a class="line" href="class_random_number_store.html#aa7c2e0b12f4c8909f9424bbc77eb85dd"> 1222</a></span> <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> &target, lword &transferBytes, <span class="keyword">const</span> std::string &channel, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> {</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>  <span class="keywordflow">if</span> (!blocking)</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>  <span class="keywordflow">throw</span> <a class="code" href="class_not_implemented.html">NotImplemented</a>(<span class="stringliteral">"RandomNumberStore: nonblocking transfer is not implemented by this object"</span>);</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> </div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>  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>  m_rng-><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>  m_count += transferBytes;</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> </div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> }</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> </div><div class="line"><a name="l01234"></a><span class="lineno"><a class="line" href="class_null_store.html#a392d1f43c190dd48e145ddbc3c7ffba3"> 1234</a></span> <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> &target, lword &begin, lword end, <span class="keyword">const</span> std::string &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> <span class="keyword"></span>{</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>  <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>  <span class="keywordflow">while</span> (begin < end)</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>  {</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  <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>  <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>  <span class="keywordflow">if</span> (blockedBytes)</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>  <span class="keywordflow">return</span> blockedBytes;</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>  begin += len;</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>  }</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> }</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> </div><div class="line"><a name="l01248"></a><span class="lineno"><a class="line" href="class_null_store.html#ac56b49281ee6f702ed4d23692e6d5528"> 1248</a></span> <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> &target, lword &transferBytes, <span class="keyword">const</span> std::string &channel, <span class="keywordtype">bool</span> blocking)</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> {</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  lword begin = 0;</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>  <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>  transferBytes = begin;</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>  m_size -= begin;</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>  <span class="keywordflow">return</span> blockedBytes;</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> }</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> </div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> NAMESPACE_END</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> </div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> <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 &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 &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 &hm, BufferedTransformation *attachment=NULL, bool putMessage=false, int truncatedDigestSize=-1, const std::string &messagePutChannel=DEFAULT_CHANNEL, const std::string &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 &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 &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 &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 &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 &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 &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 &target, lword &byteCount, const std::string &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 &channel, size_t &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 &target, lword &begin, lword end=LWORD_MAX, const std::string &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 &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 &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<byte> 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 &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 &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 -> </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 &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&#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 &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 &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 &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 &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 &channel, size_t &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 &target, lword &begin, lword end=LWORD_MAX, const std::string &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 &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 &a, const T2 &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 &a, const T2 &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 &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 &target, lword &begin, lword end=LWORD_MAX, const std::string &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 &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 &target, lword &transferBytes, const std::string &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 &target, lword &begin, lword end=LWORD_MAX, const std::string &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 & STDMIN(const T &a, const T &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 &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&#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 &target, lword &transferBytes, const std::string &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 &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 &target, const std::string &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 &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 &target, lword &transferBytes, const std::string &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 &target, lword copyMax=LWORD_MAX, const std::string &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 &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&#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&#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 &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 & STDMAX(const T &a, const T &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 &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 &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 &target, lword &transferBytes, const std::string &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 &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 &c, BufferedTransformation *attachment=NULL, bool putAAD=false, int truncatedDigestSize=-1, const std::string &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 &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 &target, const std::string &channel, size_t minSize, size_t desiredSize, size_t &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 &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 &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 &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 &n, const T2 &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 &target, const std::string &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 &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 &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  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.14 </small></address> </body> </html>